创建函数来处理 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

在任何严肃的代码审查中,您都应该取回您的代码以解决此问题。我强烈建议不要这样做——你只是捕获了最常见的异常,让这个结构更灵活会让它使用起来很糟糕!

例外应该是:

  • 尽可能在本地处理
  • 越具体越好

您的代码恰恰相反。

独库: