创建函数来处理Python中的异常

时间:2018-12-02 20:10:16

标签: python python-3.x exception-handling

我想知道是否有可能编写一个函数来避免每次为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块中运行,以便在发生任何错误时将错误直接添加到日志中。

这可能吗?

1 个答案:

答案 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: