gpt4 book ai didi

python - 通用日志记录函数包装器

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:56 25 4
gpt4 key购买 nike

所以我想做的基本上是从常用库(例如 subprocess、shutil 等...)中获取一堆预先存在的函数,并将它们包装在一个函数中,该函数将输出函数的内容如果发生任何错误,也会做同样的事情。我当前的代码看起来像这样。

def copytree(self,*args, **kwargs):
self.debug(f":- Copying tree from \"{args[0]}\" to \"{args[1]}\"")
try:
shutil.copytree(*args,**kwargs)
except Exception as e:
self.error(f":- Failed to copy tree from \"{args[0]}\" to \"{args[1]}\" ; \"{e}\"")
return False
self.debug(f":- Done")
return True

我觉得可能有更好的方法可以做到这一点,其中有一个通用包装器可以用于任何函数,但我在概念化它时遇到了麻烦。我也不确定是否有一种方法可以解释在所述通用包装器中不会引发异常的函数。

另外:self.debug 和 self.error 都来自日志模块

最佳答案

我会使用 function decoratorlogging模块。

这是一个简单而肮脏的例子:

import logging
logging.basicConfig(level=logging.INFO)


# decorator
def logged(func):
def wrapper(*args, **kwargs):
try:
logging.info("started '{0}', parameters : {1} and {2}".
format(func.__name__, args, kwargs))
return func(*args, **kwargs)
except Exception as e:
logging.exception(e)
return wrapper


@logged
def foo(val):
print(val/2)


if __name__ == "__main__":
foo("a")

输出:

INFO:root:started 'foo', parameters : ('a',) and {}

ERROR:root:unsupported operand type(s) for /: 'str' and 'int'

Traceback (most recent call last): File "C:/Users/xxxx.py", line 9, in wrapper return func(*args, **kwargs) File "C:/Users/xxxx.py", line 17, in foo print(val/2)

TypeError: unsupported operand type(s) for /: 'str' and 'int'

关于python - 通用日志记录函数包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50415666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com