百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

python内置模块warnings,警告模块

toyiye 2024-09-03 00:56 4 浏览 0 评论

一、简介

warnings 模块是 Python 标准库中的一个模块,用于处理警告信息。它提供了一种机制,可以让开发者在代码中发出警告,以提醒用户潜在的问题或不推荐的用法。使用

warnings 模块可以帮助开发者在代码中标记潜在的问题,并提供一些控制警告行为的选项。

二、方法

  1. warnings.warn(*args, **kwargs):用于发出警告。
  • *args 的位置参数如下:
    • message:作为第一个位置参数,可以是一个字符串,用于指定警告消息的内容。
    • category:作为第二个位置参数(可选),用于指定警告的类别。如果未提供,默认为 Warning 类别。
  • **kwargs的关键字参数如下:
    • category:指定警告的类别。可以是一个警告类的实例,用于自定义警告类别。默认为 Warning。
    • filename:指定发出警告的文件名。
    • lineno:指定发出警告的行号。
    • module:指定发出警告的模块名。
    • source:指定发出警告的源代码。
import warnings

def divide(a, b):
    if b == 0:
        warnings.warn("Dividing by zero is not recommended.", category=RuntimeWarning)
    return a / b

result = divide(10, 0)
print(result)
  1. warnings.warn_explicit(*args, **kwargs):函数用于显式地发出警告,提供了更详细的控制选项。
  • *args 的位置参数如下:
    • message:作为第一个位置参数,可以是一个字符串,用于指定警告消息的内容。
    • category:作为第二个位置参数(可选),用于指定警告的类别。如果未提供,默认为 Warning 类别。
  • **kwargs的关键字参数如下:
    • category:指定警告的类别。可以是一个警告类的实例,用于自定义警告类别。默认为 Warning。
    • filename:指定发出警告的文件名。
    • lineno:指定发出警告的行号。
    • module:指定发出警告的模块名。
    • source:指定发出警告的源代码。
def divide(a, b):
    if b == 0:
        filename = "example.py"        lineno = 10        category = UserWarning        warnings.warn_explicit("Dividing by zero is not recommended.", category, filename, lineno)
    return a / bresult = divide(10, 0)
print(result)
  1. warnings.filterwarnings(action, message="", category=Warning, module="", lineno=0, append):用于控制警告行为。
  • action:字符串,表示要执行的操作。可以是以下值之一:
    • 'error':将警告视为错误,抛出 Warnings 异常。
    • 'ignore':忽略警告,不显示警告信息。
    • 'always':始终显示警告信息。
    • 'default':使用默认的警告显示方式,通常是显示一次。
    • 'module':只显示来自指定模块的警告。
    • 'once':只显示每个警告类型的第一次出现的警告。
  • message:字符串,用于指定要匹配的警告消息。如果不指定,则匹配所有警告消息。
  • category:警告类别。默认为 Warning 类。
  • module:字符串,用于指定要匹配的模块名。如果不指定,则匹配所有模块。
  • lineno:整数,用于指定要匹配的行号。如果不指定,则匹配所有行号。
import warnings

# 定义一个自定义的警告类
class CustomWarning(Warning):
    pass

# 设置警告过滤器
warnings.filterwarnings('error', category=CustomWarning, module='my_module', lineno=10)

# 抛出一个警告
warnings.warn('This is a custom warning', category=CustomWarning, module='my_module', lineno=10)
  1. warnings.formatwarning(message, category, filename, lineno, line):用于自定义警告消息的格式。
  • message:字符串,表示警告消息。
  • category:警告类别。
  • filename:字符串,表示发出警告的文件名。
  • lineno:整数,表示发出警告的行号。
  • line:字符串,表示发出警告的源代码行。
import warnings

# 自定义警告格式化函数
def custom_formatwarning(message, category, filename, lineno, line):
    return f"Custom Warning: {message} ({filename}:{lineno})\n"

# 设置警告格式化函数
warnings.formatwarning = custom_formatwarning

# 抛出一个警告
warnings.warn("This is a custom warning", category=UserWarning)
  1. warnings.simplefilter(action, category=Warning, lineno=0, append=False):filterwarnings() 函数的简化版本
  2. warnings.resetwarnings():用于重置警告设置为默认值。

三、警告类别

  1. Warning:所有警告类的基类。
  2. UserWarning:用户定义的警告类。
  3. DeprecationWarning:关于已弃用功能的警告。
  4. PendingDeprecationWarning:关于即将弃用功能的警告。
  5. SyntaxWarning:语法相关的警告。
  6. RuntimeWarning:运行时警告,通常指示潜在的问题或错误。
  7. FutureWarning:关于可能在未来版本中更改的警告。
  8. ImportWarning:关于导入模块时的警告。
  9. UnicodeWarning:与 Unicode 相关的警告。
  10. BytesWarning:与字节序列相关的警告。
  11. ResourceWarning:与资源管理相关的警告。

四、其他

  1. warnings.WarningMessage.ssage:警告消息的文本内容。
  2. warnings.WarningMessage.line:警告消息所在的源代码行的文本内容。
  3. warnings.WarningMessage.lineno:警告消息所在的源代码行号。
  4. warnings.WarningMessage.filename:包含警告消息的源代码文件名。
  5. warnings.WarningMessage.file:包含警告消息的源代码文件对象。
  6. warnings.WarningMessage.category:警告消息的类别。
  7. warnings.WarningMessage.source:警告消息的源代码文本内容。
  8. warnings.catch_warnings(record=False, module=None,action=None, category=Warning, lineno=0, append):上下文管理器,用于捕获并记录警告消息
  • record:指定是否记录捕获的警告消息。如果设置为 True,则警告消息将被记录在一个列表中,可以通过 warnings.catch_warnings() 返回的上下文管理器的 warnings 属性访问。如果设置为 False,则警告消息将只是简单地被捕获,而不会记录下来。
  • module:指定要应用警告过滤器的模块对象。如果设置为 None,则默认为当前模块。
  • action:指定警告处理的动作。可以是一个函数或字符串。如果是一个函数,它将被调用以处理每个捕获的警告消息。如果是一个字符串,它可以是以下值之一:
    • 'error':将警告消息视为异常,并引发 Warning 类型的异常。
    • 'ignore':忽略警告消息,不进行任何处理。
    • 'always':始终打印警告消息,而不管警告过滤器的设置。
  • category:指定要捕获的警告类别。可以是一个警告类别或警告类别的元组。如果设置为 Warning,则捕获所有警告。
  • lineno:指定警告消息所在的源代码行号。如果设置为 0,则不进行行号匹配。
  • append:指定是否将警告消息追加到警告列表的末尾。如果设置为 True,则新的警告消息将追加到列表末尾。如果设置为 False,则新的警告消息将插入到列表的开头。
  1. warnings.filters.count(value):返回过滤器列表中等于 value 的元素的数量。
  2. warnings.filters.index(value, start, stop):返回过滤器列表中第一个等于 value 的元素的索引。可以指定搜索的起始位置 start 和结束位置 stop。
import warnings

def custom_warning_function():
    warnings.warn("This is a custom warning")

with warnings.catch_warnings(record=True) as warning_list:
    custom_warning_function()
    warning = warning_list[0]

print(warning.message)
print(warning.line)
print(warning.lineno)
print(warning.filename)
print(warning.file)
print(warning.category)
print(warning.source)

# 获取警告过滤器列表中的数量和索引
filter_count = warnings.filters.count()
filter_index = warnings.filters.index('default')
print(filter_count)
print(filter_index)

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码