14.11 输出è¦å‘Šä¿¡æ�¯Â¶
问题¶
ä½ å¸Œæœ›è‡ªå·±çš„ç¨‹åº�能生æˆ�è¦å‘Šä¿¡æ�¯ï¼ˆæ¯”如废弃特性或使用问题)。
解决方案¶
è¦�输出一个è¦å‘Šæ¶ˆæ�¯ï¼Œå�¯ä½¿ç”¨ warning.warn() 函数。例如:
import warnings
def func(x, y, logfile=None, debug=False):
if logfile is not None:
warnings.warn('logfile argument deprecated', DeprecationWarning)
...
warn() çš„å�‚数是一个è¦å‘Šæ¶ˆæ�¯å’Œä¸€ä¸ªè¦å‘Šç±»ï¼Œè¦å‘Šç±»æœ‰å¦‚ä¸‹å‡ ç§�:UserWarning, DeprecationWarning,
SyntaxWarning, RuntimeWarning, ResourceWarning, 或 FutureWarning.
对è¦å‘Šçš„处ç�†å�–å†³äºŽä½ å¦‚ä½•è¿�行解释器以å�Šä¸€äº›å…¶ä»–é…�置。
ä¾‹å¦‚ï¼Œå¦‚æžœä½ ä½¿ç”¨ -W all 选项去è¿�行Pythonï¼Œä½ ä¼šå¾—åˆ°å¦‚ä¸‹çš„è¾“å‡ºï¼š
bash % python3 -W all example.py
example.py:5: DeprecationWarning: logfile argument is deprecated
warnings.warn('logfile argument is deprecated', DeprecationWarning)
通常æ�¥è®²ï¼Œè¦å‘Šä¼šè¾“å‡ºåˆ°æ ‡å‡†é”™è¯¯ä¸Šã€‚å¦‚æžœä½ æƒ³è®²è¦å‘Šè½¬æ�¢ä¸ºå¼‚常,å�¯ä»¥ä½¿ç”¨ -W error 选项:
bash % python3 -W error example.py
Traceback (most recent call last):
File "example.py", line 10, in <module>
func(2, 3, logfile='log.txt')
File "example.py", line 5, in func
warnings.warn('logfile argument is deprecated', DeprecationWarning)
DeprecationWarning: logfile argument is deprecated
bash %
讨论¶
åœ¨ä½ ç»´æŠ¤è½¯ä»¶ï¼Œæ��示用户æŸ�些信æ�¯ï¼Œä½†æ˜¯å�ˆä¸�需è¦�将其上å�‡ä¸ºå¼‚常级别,那么输出è¦å‘Šä¿¡æ�¯å°±ä¼šå¾ˆæœ‰ç”¨äº†ã€‚ 例如,å�‡è®¾ä½ 准备修改æŸ�ä¸ªå‡½æ•°åº“æˆ–æ¡†æž¶çš„åŠŸèƒ½ï¼Œä½ å�¯ä»¥å…ˆä¸ºä½ è¦�更改的部分输出è¦å‘Šä¿¡æ�¯ï¼Œå�Œæ—¶å�‘å�Žå…¼å®¹ä¸€æ®µæ—¶é—´ã€‚ ä½ è¿˜å�¯ä»¥è¦å‘Šç”¨æˆ·ä¸€äº›å¯¹ä»£ç �有问题的使用方å¼�。
作为å�¦å¤–一个内置函数库的è¦å‘Šä½¿ç”¨ä¾‹å�,下é�¢æ¼”ç¤ºäº†ä¸€ä¸ªæ²¡æœ‰å…³é—æ–‡ä»¶å°±é”€æ¯�它时产生的è¦å‘Šæ¶ˆæ�¯ï¼š
>>> import warnings
>>> warnings.simplefilter('always')
>>> f = open('/etc/passwd')
>>> del f
__main__:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='/etc/passwd'
mode='r' encoding='UTF-8'>
>>>
默认情况下,并ä¸�是所有è¦å‘Šæ¶ˆæ�¯éƒ½ä¼šå‡ºçŽ°ã€‚-W 选项能控制è¦å‘Šæ¶ˆæ�¯çš„输出。
-W all 会输出所有è¦å‘Šæ¶ˆæ�¯ï¼Œ-W ignore 忽略掉所有è¦å‘Šï¼Œ-W error å°†è¦å‘Šè½¬æ�¢æˆ�异常。
å�¦å¤–一ç§�é€‰æ‹©ï¼Œä½ è¿˜å�¯ä»¥ä½¿ç”¨ warnings.simplefilter() 函数控制输出。
always å�‚数会让所有è¦å‘Šæ¶ˆæ�¯å‡ºçŽ°ï¼Œ`ignore 忽略调所有的è¦å‘Šï¼Œerror å°†è¦å‘Šè½¬æ�¢æˆ�异常。
对于简å�•的生æˆ�è¦å‘Šæ¶ˆæ�¯çš„æƒ…况这些已ç»�足够了。
warnings 模å�—对过滤和è¦å‘Šæ¶ˆæ�¯å¤„ç�†æ��供了大é‡�的更高级的é…�置选项。
更多信�请�考 Python文档