Python 警告堆栈级别

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

最佳答案

这正是您所要求的: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/

相关文章:

python - 删除两个等长数组中nan AND对应的元素

python - 四舍五入数据框列时处理字符串值

python - 使用 Python 2.7 + Selenium Webdriver 处理 "Authentication Required"警告框

python - 在 numpy 中提取和转换数据

python - .pyc 文件是否包含类型提示信息?

python-3.x - 无法使用类对象中的ssh隧道建立与远程mongoDB服务器的连接

python - Pandas 有条件地将数据框添加到另一个数据框

python - pandas 用左引号和右引号解析 csv

Python BaseHTTPServer.HTTPServer - 启动和停止事件的回调

python - 如何反转列表中以字典为值的键值对?