关于getopt:如何以我自己的方式处理python生成的错误消息?

How to process python generated error messages my own way?

对于以下代码:< PRE>opts,args=getopt.getopt(sys.argv[1:,,"C:",…对于opts中的o、v:…elif o in("-c",-%s"%checkstring"):kcheckOnly=真客户端温度=V[/cc]

如果在-c之后没有给出参数,我会得到如下的错误消息。

< PRE>回溯(最近一次呼叫的最后一次):文件"nippgatingviolationmain.py",第100行,inopts,args=getopt.getopt(sys.argv[1:,"hdc:t:",[helpstring,debugtring,checkstring,twxstring])文件"/system/library/frameworks/python.framework/versions/2.6/lib/python2.6/getopt.py",第91行,在getopt中opts,args=do_short(opts,args[0][1:],shortopts,args[1:]文件"/system/library/frameworks/python.framework/versions/2.6/lib/python2.6/getopt.py",第195行,在do-short中opt)getopt.getopterror:选项-c需要参数[/cc]

是否有任何方法可以捕获此错误并将其处理为打印类似的内容?似乎只在try/except中包装代码不起作用。

< PRE>错误:您忘记在-c选项后提供文件名[/cc]


正确的答案是使用OptionParser模块,而不是尝试"滚动您自己的"。


您可以捕获getopt.getopterror并自己检查"opt"和"msg"属性:

1
2
3
4
5
6
try:
    opts, args = getopt.getopt(sys.argv[1:],"c:", ...
except getopt.GetoptError, e:
    if e.opt == 'c' and 'requires argument' in e.msg:
        print >>sys.stderr, 'ERROR: You forgot to give the file name after -c option'
        sys.exit(-1)