我想知道是否有可能编写一个函数来避免每次为Python中的危险函数调用try ... except
块。
我尝试了以下代码,但是没有用:
def e(methodtoRun):
try:
methodtoRun.call()
except Exception as inst:
print(type(inst)) # the exception instance
print(inst.args) # arguments stored in .args
print(inst) # __str__ allows args to be printed directly,
def divider(a, b):
return a / b
e(divider(1,0))
在此代码中,Python运行divider(1,0)
并尝试将结果作为参数传递给e
函数。
我想做的是将一个函数作为参数传递并在函数try ... except
块中运行,以便在发生任何错误时将错误直接添加到日志中。
这可能吗?
答案 0 :(得分:2)
您可以执行此操作..但这确实使代码阅读起来并不好。
您的示例不起作用,因为您将函数调用divider(1,0)
的“结果”提供给e
。永远不会涉及到处理异常,因为您已经调用了该函数并且该异常已经发生。
您需要将函数本身和所有参数传递给e
。
将其更改为:
def e(methodtoRun, *args):
try:
methodtoRun(*args) # pass arguments along
except Exception as inst:
print(type(inst)) # the exception instance
print(inst.args) # arguments stored in .args
print(inst) # __str__ allows args to be printed directly,
def divider(a, b):
return a / b
e(divider,1,0) # give it the function and any params it needs
获得:
<type 'exceptions.ZeroDivisionError'>
('integer division or modulo by zero',)
integer division or modulo by zero
在任何认真的代码审查中,您都应该找回代码来解决此问题。我强烈建议不要这样做-您仅捕获最一般的异常,并且使此构造更加灵活将使它使用起来很恐怖!
例外应为:
您的代码正好相反。
Doku: