2

我想知道我在我的 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)。

4

2 回答 2

9

Exception("Invalid Logtype")仍然只是一个Exception, 只是现在有一条错误消息。"Invalid Logtype"不是错误,只是 a str,所以你无法捕捉到它。

尝试:

class InvalidLogtype(Exception): pass

try:
    raise InvalidLogType
except InvalidLogType:
    pass

请注意,您可以通过执行基于错误消息捕获

except Exception, e:
    if e.args == ("Invalid Logtype",):
        ...

    else:
        raise
于 2013-09-26T17:56:07.773 回答
4

试试这个:

class InvalidLogType(Exception):
   pass

然后

raise InvalidLogType()

然后

except InvalidLogType:
   etc
于 2013-09-26T17:55:45.287 回答