我正在尝试使用警告堆栈级别,警告消息不包括生成它的源代码行,但我看到的不是仅消息,而是多一行:
File "sys", line 1
有可能不得到这一行吗?
这是我的代码:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import warnings
def warning_function():
warnings.warn("Python 3.x is required!", RuntimeWarning, stacklevel = 8)
if sys.version_info[0] < 3:
...
else:
warning_function()
最佳答案
这正是您所要求的:stacklevel=8
参数需要在显示当前行之间展开 7 个调用。由于您没有那么多的调用,因此您最终会启动 Python 解释器。
如果您想进一步控制打印的字符串,您应该覆盖 warnings.showwarning
函数:
old_fw = warnings.showwarning # store previous function...
def new_sw(message, category, filename, lineno, file = None, line = None):
msg = warnings.formatwarning(message, category, filename, lineno,
line).split(':')[-2:]
sys.stderr.write("Warning (from warnings module):\n{}:{}\n".format(
msg[0][1:], msg[1]))
warnings.showwarning = new_sw
这样你就不会出现File "...", line ...
line
关于Python 警告堆栈级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41858995/