创建函数来处理 Python 中的异常
Creating Function to handle exceptions in Python
我想知道是否可以编写一个函数来避免每次为 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 运行s divider(1,0)
并尝试将结果作为参数传递给 e
函数。
我想做的是传递一个函数作为参数,运行 它在函数 try ... except
块中,这样,如果发生任何错误,我会将错误添加到日志中直接。
这可能吗?
您可以这样做 .. 但它确实使代码的可读性并没有真正提高。
您的示例不起作用,因为您将函数调用 divider(1,0)
的 "result" 提供给了 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
在任何严肃的代码审查中,您都应该取回您的代码以解决此问题。我强烈建议不要这样做——你只是捕获了最常见的异常,让这个结构更灵活会让它使用起来很糟糕!
例外应该是:
- 尽可能在本地处理
- 越具体越好
您的代码恰恰相反。
独库:
- Exception handling - 你是从那里复制的,ref 是给其他人的
- arbitraty argument lists aka *args
- unpacking lists
我想知道是否可以编写一个函数来避免每次为 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 运行s divider(1,0)
并尝试将结果作为参数传递给 e
函数。
我想做的是传递一个函数作为参数,运行 它在函数 try ... except
块中,这样,如果发生任何错误,我会将错误添加到日志中直接。
这可能吗?
您可以这样做 .. 但它确实使代码的可读性并没有真正提高。
您的示例不起作用,因为您将函数调用 divider(1,0)
的 "result" 提供给了 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
在任何严肃的代码审查中,您都应该取回您的代码以解决此问题。我强烈建议不要这样做——你只是捕获了最常见的异常,让这个结构更灵活会让它使用起来很糟糕!
例外应该是:
- 尽可能在本地处理
- 越具体越好
您的代码恰恰相反。
独库:
- Exception handling - 你是从那里复制的,ref 是给其他人的
- arbitraty argument lists aka *args
- unpacking lists