我正在尝试警告消息不包括生成它的源代码行,使用警告堆栈级别,但是我没有再看到消息,而是另外一行说:
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()
答案 0 :(得分:1)
这正是你所要求的: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 ...
行