实现python异常

时间:2009-12-09 23:26:54

标签: python exception

我在程序中实现异常系统时遇到一些问题。 我在以下代码中找到了我想要用于我的程序的代码:

class InvalidProgramStateException(Exception):
    def __init__(self, expr, msg):
        self.expr = expr
        self.msg = msg

我认为msg必须是要显示的字符串消息,但是当我想要引发此异常时如何填写“expr”?我必须手工编写吗?

raise InvalidProgramStateException(what_here?, "there was an error")

2 个答案:

答案 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

对于您引用的示例,exprmsg参数特定于示例的虚构大小写。如何使用这些方法的设计方案是:

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