📜  Python|重新引发最后一个异常并发出警告

📅  最后修改于: 2022-05-13 01:54:51.621000             🧑  作者: Mango

Python|重新引发最后一个异常并发出警告

问题 -重新引发异常,该异常已在except块中捕获。

代码 #1:单独使用 raise 语句。
def example():
    try:
        int('N/A')
    except ValueError:
        print("Didn't work")
        raise
          
example()

输出 :

Didn't work
Traceback (most recent call last):
    File "", line 1, in 
    File "", line 3, in example
ValueError: invalid literal for int() with base 10: 'N/A'

当不需要采取任何行动来响应异常(例如,记录、清理等)时,通常会出现此问题。一个非常常见的用途可能是在包罗万象的异常处理程序中。

代码 #2:捕获所有异常处理程序。

try:
 ...
except Exception as e:
    # Process exception information in some way
    ...
    # Propagate the exception
    raise


问题 2 –让程序发出警告消息(例如,关于不推荐使用的功能或使用问题)。

代码 #3:使用warnings.warn()函数

import warnings
def func(x, y, logfile = None, debug = False):
    if logfile is not None:
        warnings.warn('logfile argument deprecated',
                                DeprecationWarning)

warn()的参数是带有警告类的警告消息,通常是以下之一:
UserWarning、DeprecationWarning、SyntaxWarning、RuntimeWarning、ResourceWarning 或 FutureWarning。
警告的处理取决于解释器的执行方式和其他配置。

使用-W all选项运行Python时的输出。

bash % python3 -W all example.py
example.py:5: DeprecationWarning: logfile argument is deprecated
  warnings.warn('logfile argument is deprecated', DeprecationWarning)

通常,警告只会在标准错误上产生输出消息。要将警告转换为异常,请使用-W error选项。

bash % python3 -W error example.py
Traceback (most recent call last):
    File "example.py", line 10, in 
        func(2, 3, logfile ='log.txt')
    File "example.py", line 5, in func
        warnings.warn('logfile argument is deprecated', DeprecationWarning)
DeprecationWarning: logfile argument is deprecated
bash %