分类目录:《系统学习Python》总目录
warnings.warn(message, category=None, stacklevel=1, source=None, \*, skip_file_prefixes=None)
常备用于引发警告、忽略或者触发异常。 如果给出category参数,则必须是警告类别类 ;默认为UserWarning
。 或者message
可为Warning
的实例,这时category
将被忽略,转而采用message.__class__
。 在这种情况下,错误信息文本将是str(message)
。 如果某条警告被 警告过滤器 改成了错误,本函数将触发一条异常。 参数stacklevel
可供Python包装函数使用,比如下列会让警告指向deprecated_api
的调用者,而不是deprecated_api
本身的来源(因为后者会破坏警告消息的目的)。:
def deprecated_api(message):
warnings.warn(message, DeprecationWarning, stacklevel=2)
source
:发出ResourceWarning
的被销毁对象。skip_file_prefixes
:用来指明在栈层级计数时哪些栈帧要被忽略。 当常数stacklevel
不能适应所有调用路径或在其他情况下难以维护如果你希望警告总是在一个包以外的调用位置上出现这将会很有用处。 如果提供,则它必须是一个字符串元组。 当提供了prefixes
前缀时,stacklevel
会被隐式地覆盖为max(2, stacklevel)
。 要使得一个警告被归因至当前包以外的调用方你可以这样写:# example/lower.py
_warn_skips = (os.path.dirname(__file__),)
def one_way(r_luxury_yacht=None, t_wobbler_mangrove=None):
if r_luxury_yacht:
warnings.warn("Please migrate to t_wobbler_mangrove=.",
skip_file_prefixes=_warn_skips)
# example/higher.py
from . import lower
def another_way(**kw):
lower.one_way(**kw)
这将使得警告同时指向example.lower.one_way()
和来自example
包以外的调用代码的package.higher.another_way()
调用位置。