如何在不使用try / except的情况下捕获错误?

时间:2017-07-18 22:52:43

标签: python-3.x error-handling

有没有我可以用来捕捉python中的错误而不使用try / except?

我在考虑这样的事情:

main.py

from catch_errors import catch_NameError
print(this_variable_is_not_defined)

catch_errors.py

def catch_NameError(error):
    if type(error) == NameError:
        print("You didn't define the error")

输出结果为:

You didn't define the error

而不是:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    print(this_variable_is_not_defined)
NameError: name 'this_variable_is_not_defined' is not defined

1 个答案:

答案 0 :(得分:0)

可以通过创建上下文管理器来完成,但它比明确的try:except:带来了可疑的好处。您将不得不使用with语句,因此将清楚行为将在何处更改。在此示例中,我使用contextlib.contextmanager执行此操作,这样可以节省使用__enter____exit__方法创建类的乏味。

from contextlib import contextmanager

@contextmanager
def IgnoreNameErrorExceptions():
    """Context manager to ignore NameErrors."""
    try:
        yield
    except NameError as e:
        print(e)  # You can print whatever you want here.

with IgnoreNameErrorExceptions():
    print(this_variable_is_not_defined)

这将输出

name 'this_variable_is_not_defined' is not defined