我在程序中实现异常系统时遇到一些问题。 我在以下代码中找到了我想要用于我的程序的代码:
class InvalidProgramStateException(Exception):
def __init__(self, expr, msg):
self.expr = expr
self.msg = msg
我认为msg必须是要显示的字符串消息,但是当我想要引发此异常时如何填写“expr”?我必须手工编写吗?
raise InvalidProgramStateException(what_here?, "there was an error")
答案 0 :(得分:11)
您的自定义异常实际上根本不需要参数。如果您没有任何特定的错误消息或状态要封装在Exception中,这将正常工作:
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__
或__unicode__
方法,以便提供有意义的文字描述:
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return "MyException with %s" % self.msg
对于您引用的示例,expr
和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)
由于您的应用程序似乎不需要它,只需删除您不需要的参数。
答案 1 :(得分:2)
检查此网站:Error tutorials Python