您的自定义异常实际上根本不需要采用参数。如果您没有任何特定的错误消息或状态要封装在异常中,那么这将很好地工作:
class MyException(Exception):
pass
这将允许您的程序按类型捕获此异常的情况:
try:
raise MyException()
except MyException:
print "Doing something with MyException"
except:
print "Some other error occurred... handling it differently"
如果您希望 Exception 具有一些有意义的字符串表示形式,或者具有可以为您的应用程序提供有关错误原因的更多详细信息的属性,那么您可以将其他参数传递给构造函数。这些参数的数量、名称和类型并不是由 Python 预先定义的……它们可以是任何东西。请务必提供自定义__str__
or __unicode__
方法,以便您可以提供有意义的文本描述:
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return "MyException with %s" % self.msg
在您引用的示例中,expr
and msg
参数特定于示例的虚构情况。关于如何使用这些的一个人为场景是:
def do_something(expr):
if 'foo' in expr:
raise InvalidProgramStateException(expr, "We don't allow foos here")
return 5
user_input = 'foo bar'
try:
do_something(user_input)
except InvalidProgramStateException, e:
print "%s (using expression %s)" % (e.msg, e.expr)
由于您的应用程序似乎不需要它,因此只需删除不需要的参数即可。