为什么我的用户定义的异常没有得到正确处理?

时间:2013-09-26 17:54:14

标签: python

我想知道我在我的python程序中从一个类中引发的用户定义的异常没有被我main()中的正确异常处理程序处理。说我上课了:

class Pdbalog:
    # Constructor
    def __init__(self, logtype):
        if logtype == 1 or logtype == 2:
            # These are valid
            self.logtypeV = logtype
            ...<continue processing>
        else:
            # Invalid
            raise Exception("Invalid Logtype")

我的main看起来像是:

from pdbalog import *
def main():
    try:
        mylog = Pdbalog(10)
        ...<other code here>

    except "Invalid Logtype":
        print('Exiting...')
    except:
        print('Unhandled exception')
        raise

我希望在运行main时,我实例化Pdbalog对象的行会引发异常(Exception("Invalid Logtype"))和main except "Invalid Logtype"中的异常处理程序})将打印输出字符串"Exiting..."。但事实并非如此。它由未处理的异常处理程序处理。最终发生的是输出字符串"Unhandled exception"。为什么不是

    except "Invalid Logtype":

处理异常?

我正在使用旧版本的python(2.4)。

2 个答案:

答案 0 :(得分:9)

Exception("Invalid Logtype")仍然只是Exception,刚才有错误消息。 "Invalid Logtype"不是错误,只是str,所以你无法抓住它。

尝试:

class InvalidLogtype(Exception): pass

try:
    raise InvalidLogType
except InvalidLogType:
    pass

请注意,您可以通过执行

基于错误消息捕获
except Exception, e:
    if e.args == ("Invalid Logtype",):
        ...

    else:
        raise

答案 1 :(得分:4)

请改为尝试:

class InvalidLogType(Exception):
   pass

然后

raise InvalidLogType()

然后

except InvalidLogType:
   etc