Документация optparse
гласит:
Если поведение обработки ошибок по умолчанию в optparse не соответствует вашим потребностям, вам необходимо создать подкласс OptionParser и переопределить его методы exit () и / или error ().
В идеале вы должны определить новый тип исключения, подкласс optparse
, вызвать исключение в переопределенном методе exit()
или error()
, а затем перехватить его и обработать при необходимости.
Вы можете обманывать, хотя. Если вы хотите напечатать сообщение об ошибке, но просто не хотите, чтобы программа закрывалась, вы можете поймать исключение SystemExit
, чтобы определить, где optparse
пытается выйти и остановить его.
Так, например:
try:
(options, positional_args) = parser.parse_args(args[0:])
except SystemExit:
return
cd_obj= CD()
cd_obj.addCD(options.track_number, options.cd_name)
или переопределить метод:
import optparse
class OptionParsingError(RuntimeError):
def __init__(self, msg):
self.msg = msg
class OptionParsingExit(Exception):
def __init__(self, status, msg):
self.msg = msg
self.status = status
class ModifiedOptionParser(optparse.OptionParser):
def error(self, msg):
raise OptionParsingError(msg)
def exit(self, status=0, msg=None):
raise OptionParsingExit(status, msg)
и затем:
try:
parser = ModifiedOptionParser()
parser.add_option("-t", "--track", dest="track_number", type="int",
help="track number")
(options, positional_args) = parser.parse_args(args[0:])
except OptionParsingError, e:
print 'There was a parsing error: %s' % e.msg
return
except OptionParsingExit, e:
print 'The option parser exited with message %s and result code %s' % (e.msg, e.status)
return
cd_obj= CD()
cd_obj.addCD(options.track_number, options.cd_name)