忽略在python 3中向调用者引发异常

时间:2016-08-20 17:57:08

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

如何忽略在python 3中调用者的某个异常?

示例:

def do_something():
    try:
        statement1
        statement2
    except Exception as e:
        # ignore the exception
        logging.warning("this is normal, exception is ignored")


try:
    do_something()
except Exception as e:
    # this is unexpected control flow, the first exception is already ignored !! 
    logging.error("unexpected error")
    logging.error(e)  # prints None

我发现有人提到" 由于在Python中记住了最后抛出的异常,异常抛出语句中涉及的一些对象将无限期地保持活动"然后提到使用" sys.exc_clear()"在这种情况下,python 3中不再可用。任何线索如何在python3中完全忽略异常?

1 个答案:

答案 0 :(得分:1)

在Python 3中没有必要这样做,sys.exc_clear()被删除了,因为Python没有像在Python 2中那样在内部存储最后一个引发的异常:

例如,在Python 2中,异常在函数内部时仍保持活动状态:

def foo():
    try:
        raise ValueError()
    except ValueError as e:
        print(e)

    import sys; print(sys.exc_info())

现在调用foo会显示异常:

foo()
(<type 'exceptions.ValueError'>, ValueError(), <traceback object at 0x7f45c57fc560>)

您需要致电sys.exc_clear()以清除Exception被提升的人。

在Python 3中,恰恰相反:

def foo():
    try:
        raise ValueError()
    except ValueError as e:
        print(e)
    import sys; print(sys.exc_info())

调用相同的功能:

foo()    
(None, None, None)