Как обрабатывать генерируемые Python сообщения об ошибках по-своему? - PullRequest
2 голосов
/ 06 апреля 2010

Для некоторого кода следующим образом:

    opts, args = getopt.getopt(sys.argv[1:], "c:", ...
    for o,v in opts:
...
        elif o in ("-c", "--%s" % checkString):
            kCheckOnly = True
            clientTemp = v

Если я не задаю параметр после -c, я получаю сообщения об ошибках следующим образом.

Traceback (most recent call last):
  File "niFpgaTimingViolationMain.py", line 100, in 
    opts, args = getopt.getopt(sys.argv[1:], "hdc:t:",[helpString, debugString, checkString, twxString])
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/getopt.py", line 91, in getopt
    opts, args = do_shorts(opts, args[0][1:], shortopts, args[1:])
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/getopt.py", line 195, in do_shorts
    opt)
getopt.GetoptError: option -c requires argument

Есть ли способ отловить эту ошибку и обработать ее, чтобы напечатать что-то подобное? Кажется, что просто обернуть код в try / кроме не работает.

ERROR: You forgot to give the file name after -c option

Ответы [ 2 ]

3 голосов
/ 06 апреля 2010

правильный ответ - использовать модуль OptionParser вместо того, чтобы пытаться «свернуть свой».

3 голосов
/ 06 апреля 2010

Вы можете перехватить getopt.GetoptError и самостоятельно проверить атрибуты 'opt' и 'msg':

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