2016-12-21 102 views
0

有了這個代碼:Python的警告信息輸出

#! /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) 

和ELSE輸出我得到的是:

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是必需的!」 ?

+4

如果您只想要最後一行輸出,爲什麼不打印? –

+1

你嘗試過'warnings.showwarning = send_warnings_to_log'嗎? – ArmenB

回答

2

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

注意,在這個例子中警告()需要上去堆2倍的水平,一個用於本身,一個用於old_function()。

$ python warnings_warn_stacklevel.py 

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

爲什麼當我設置stacklevel = 2時出現這個錯誤? 'File'C:\ Users \ ... \ Python \ Python35 \ lib \ idlelib \ run.py「,第351行exec(code,self.locals)' –