Python警告堆栈级别

时间:2017-01-25 18:32:22

标签: python python-3.x

我正在尝试警告消息不包括生成它的源代码行,使用警告堆栈级别,但是我没有再看到消息,而是另外一行说:

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()

1 个答案:

答案 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 ...