2010-09-11 34 views
2

在Python中向用户显示错误的最佳方式(标准)是什么(例如:语法错误,参数无效,逻辑错误)?如何在Python中显示用户错误

该方法应该在标准错误中输出错误并退出程序。

回答

4

的小程序,我用的是这样的:

import sys 

def error(message): 
    sys.stderr.write("error: %s\n" % message) 
    sys.exit(1) 

对于更大的工具,我用的是logging包。

def error(message): 
    logging.error('error: ', message) 
    sys.exit(1) 
+0

如何使用日志输出到标准错误(我已经使用它输出到文件)?我怎样才能分开两个流? – yassin 2010-09-11 16:59:09

+0

默认情况下'logging'写入'stderr';如果你想分开流,看看这个:http://docs.python.org/library/logging.html#logging-to-multiple-destinations – leoluk 2010-09-11 17:41:02

+0

如何提高SystemExit而不是'sys.exit',似乎对我来说更加pythonic。 – 2010-09-11 17:42:47

4

在Python 2,例如:

import sys 
print>>sys.stderr, "Found", numerrs, "errors in the input." 
sys.exit(1) 

在Python 3(或2.6或2.7,在您的模块的顶部的from __future__ import print_function语句),print变成函数和用于“语法印刷标准错误”现在是

print("Found", numerrs, "errors in the input.", file=sys.stderr) 

(一种更加友好的语法比在Python 2 ;-)所需的怪>>

print与(比如说)sys.stderr.write的(小)优势在于,您可以获得“所有现代便利性”:错误消息的所有部分都会自动转换为字符串,它们使用空格分隔符输出,结束时会输出结果(除非您另有特别要求)。要使用sys.stderr.write,您需要构建精确的字符串输出,通常使用字符串格式化结构 - 当然,这只是一个小小的方便。

logging通常是首选,但不是当你特别想要的错误信息去标准错误,并且只标准错误:logging提供了许多,更多的可能性(发送各种严重的消息,过滤一些,放一些到文件等),但因此它不可避免地更复杂一些。

+0

一个投票来澄清'logging'的用途。 – 2015-06-10 11:16:38