我正在尝试复制在 Python 中使用 C 编程时经常使用的错误检查模式。我有一个功能check
如下:
def check(exceptions, msg, handler):
def wrapped(func, *args, **kwargs):
try:
return func(*args, **kwargs)
except exceptions as err:
log_err(msg)
# Do something with handler
return wrapped
通过check
使用适当的参数调用,然后使用函数及其参数调用结果,可以在try-except
不牺牲清晰度的情况下将语句减少到两行代码(无论如何,在我看来)。
例如
def caller():
try:
files = listdir(directory)
except OSError as err:
log_err(msg)
return []
# Do something with files
变成
def caller():
c = check(OSError, msg, handler)
files = c(listdir, directory) # caller may return [] here
# Do something with files
问题是,为了使这种转换对程序的其余部分透明,必须handler
像在. (不必是函数对象。我追求的是效果,而不是方法。)wrapped
handler
在 CI 中只会使用宏并内联扩展所有内容(因为无论如何我都会在那里编写代码),但 Python 没有宏。是否有可能以其他方式实现这种效果?