• 14.10 重新抛出被捕获的异常
    • 问题
    • 解决方案
    • 讨论

    14.10 重新抛出被捕获的异常

    问题

    你在一个 except 块中捕获了一个异常,现在想重新抛出它。

    解决方案

    简单的使用一个单独的 rasie 语句即可,例如:

    1. >>> def example():
    2. ... try:
    3. ... int('N/A')
    4. ... except ValueError:
    5. ... print("Didn't work")
    6. ... raise
    7. ...
    8.  
    9. >>> example()
    10. Didn't work
    11. Traceback (most recent call last):
    12. File "<stdin>", line 1, in <module>
    13. File "<stdin>", line 3, in example
    14. ValueError: invalid literal for int() with base 10: 'N/A'
    15. >>>

    讨论

    这个问题通常是当你需要在捕获异常后执行某个操作(比如记录日志、清理等),但是之后想将异常传播下去。一个很常见的用法是在捕获所有异常的处理器中:

    1. try:
    2. ...
    3. except Exception as e:
    4. # Process exception information in some way
    5. ...
    6.  
    7. # Propagate the exception
    8. raise

    原文:

    http://python3-cookbook.readthedocs.io/zh_CN/latest/c14/p10_reraising_the_last_exception.html