Python警告消息输出

时间:2016-12-21 18:33:22

标签: python python-3.x

使用此代码:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import warnings

if sys.version_info[0] >= 3:
    ...
else:
    warnings.warn("Python 3.x is required!", RuntimeWarning)

我得到的其他输出是:

Warning (from warnings module):
  File "C:\Users\..., line 10
    warnings.warn("Python 3.x is required!", RuntimeWarning)
RuntimeWarning: Python 3.x is required!

有没有办法摆脱输出的前3行,只显示" RuntimeWarning:需要Python 3.x!" ?

1 个答案:

答案 0 :(得分:4)

来自https://pymotw.com/2/warnings/#stack-level-in-warnings

  

警告中的堆栈级别

     

您会注意到默认情况下警告消息包含来源   生成它的行,如果可用的话。这并不是那么有用   但是,请参阅带有实际警告消息的代码行。代替,   你可以告诉warn()它必须走多远才能找到这条线   被调用的函数包含警告。用户的方式   不推荐使用的函数查看调用函数的位置,而不是   实现该功能。

# warnings_warn_stacklevel.py
import warnings

def old_function():
    warnings.warn(
        'old_function() is deprecated, use new_function() instead', 
        stacklevel=2)

def caller_of_old_function():
    old_function()

caller_of_old_function() 

请注意,在此示例中,warn()需要上升到堆栈2级别,一个用于自身,一个用于old_function()。

$ python warnings_warn_stacklevel.py

warnings_warn_stacklevel.py:18: UserWarning: old_function() is deprecated, use new_function() instead   old_function()