📜  Python中的警告

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

Python中的警告

提供警告是为了警告开发人员注意不一定是例外的情况。通常,当某些编程元素(例如关键字、函数或类等)过时时会出现警告。程序中的警告与错误不同。如果发生错误, Python程序会立即终止。相反,警告并不重要。它显示一些消息,但程序运行。 ' warning ' 模块中定义的warn()函数用于显示警告消息。警告模块实际上是 Exception 的子类,它是Python中的内置类。

# program to display warning a message 
  
  
import warnings
  
print('Geeks')
  
# displaying the warning message 
warnings.warn('Warning Message: 4')
  
print('Geeks !')

输出:

Geeks
main.py:8: UserWarning: Warning Message: 4  
  warnings.warn('Warning Message: 4')
Geeks!

上述程序中,warning模块的warn()函数用于显示消息Warning: Message: 4UserWarningwarn()函数的默认类别。

警告类别

在Python中有多种反映警告类别的内置异常,其中一些是:

  • 警告类:它是所有警告类别类的超类,也是异常类的子类。
  • UserWarning 类: warn()函数默认类别。
  • DeprecationWarning 类:当这些警告针对其他开发人员时,有关过时功能的警报的基本类别(由 __main__ 中的代码触发,除非被忽略)。
  • SyntaxWarning 类:可疑句法属性警告的基类。
  • RuntimeWarning 类:可疑运行时属性警告的基类。
  • FutureWarning 类:当某些警告是针对 Python 编写程序的最终用户时,用于警告过时功能的基类。
  • PendingDeprecationWarning 类:过时属性警告的基类。
  • ImportWarning 类:模块导入过程中引起的警告的基类。
  • UnicodeWarning 类:基于 Unicode 的警告的基类。
  • BytesWarning 类:基于字节和字节数组的警告的基类。
  • ResourceWarning 类:资源相关警告的基类。

警告过滤器

Python中的警告过滤器处理警告(出现、忽略或引发异常)。警告过滤器建立过滤器参数的有组织的列表,任何特定的警告都匹配整个列表中的每个过滤器要求,直到匹配完成,过滤器确定匹配排列。每个条目确实是一个元组(动作、消息、类别、模块、行号),其形式为:

  • 操作可以是以下任何字符串:
    StringExplanation
    “default”Displays the first matching warnings for each position
    “error”Converts warnings to raise exceptions
    “ignore”Never display warnings which match
    “always”Always display the warnings which match
    “module”Displays the first matching warnings per module
    “once”Display just the first matching warnings, regardless of where they are located
  • 消息是一个字符串,它的正则表达式必须与警告的开头匹配。 (编译的表达式始终不区分大小写)
  • 类别是一个类(警告子类),警告类必须是其子类才能匹配。
  • 模块是一个带有正则表达式的字符串,它必须与模块名称匹配(编译的表达式始终不区分大小写)。
  • lineno是一个整数以匹配出现警告的行号,或 0 以匹配任意行数。

警告功能

警告模块的一些常用功能有:

  • warn(message, category=None, stacklevel=1, source=None):此函数显示警告,或忽略它或将 is 转换为异常。
    # program to illustrate warn() 
    # function in warning module
      
    # importing modules
    import warnings
      
    # displaying warning
    warnings.warn('Geeks 4 Geeks')
    

    输出:

    main.py:2: UserWarning: Geeks 4 Geeks
      warnings.warn('Geeks 4 Geeks')
    

    在上述程序中,使用警告模块的warn()函数显示警告。

  • warn_explicit(message, category, filename, lineno, module=None, registry=None, module_globals=None, source=None):这个函数是一个带有warn()特性的低级方法
  • filterwarnings(action, message=”, category=Warning, module=”, lineno=0, append=False):此函数在警告过滤器的规范中添加一个条目。
    # program to illustrate filterwarnings()
    # function in warning module
      
    # importing module
    import warnings
      
    # adding entry into the specifications
    # of the warnings filter.
    warnings.filterwarnings('ignore', '.*do not.*', )
      
    # displaying warinings
    warnings.warn('Geeks 4 Geeks !')
      
    # this warning will not be displayed
    warnings.warn('Do not show this message')
    

    输出:

    main.py:8: UserWarning: Geeks 4 Geeks!
      warnings.warn('Geeks 4 Geeks!')
    

    由于操作为"ignore" warnings.filterwarnings('ignore', '.*do not.*', ) ,此处未显示第二条警告消息。

  • showwarning(message, category, filename, lineno, file=None, line=None):此函数将警告写入文件。
  • simplefilter(action, category=Warning, lineno=0, append=False):此函数将单个条目添加到警告过滤器要求列表中。
    # program to illustrate simplefilter() 
    # function in warning module
      
    # importing module
    import warnings
      
    # adding a single entry into warnings filter
    warnings.simplefilter('error', UserWarning)
      
    # displaying the warning
    warnings.warn('This is a warning message')
    

    输出:

    Traceback (most recent call last):
      File "main.py", line 8, in     
         warnings.warn('This is a warning message')
    UserWarning: This is a warning message
    

    在上述程序中,使用warnings.simplefilter('error', UserWarning)将单个条目添加到警告过滤器,其中操作为"error" ,类别为UserWrning ,然后使用warn()方法显示警告。