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

Gre*_*egH 2 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")
Run Code Online (Sandbox Code Playgroud)

main看起来像:

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

    except "Invalid Logtype":
        print('Exiting...')
    except:
        print('Unhandled exception')
        raise
Run Code Online (Sandbox Code Playgroud)

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

    except "Invalid Logtype":
Run Code Online (Sandbox Code Playgroud)

处理异常?

我使用的是旧版本的python(2.4).

Vee*_*rac 9

Exception("Invalid Logtype")现在仍然只是Exception一个错误信息."Invalid Logtype"不是一个错误,只是一个str,所以你无法抓住它.

尝试:

class InvalidLogtype(Exception): pass

try:
    raise InvalidLogType
except InvalidLogType:
    pass
Run Code Online (Sandbox Code Playgroud)

请注意,您可以通过执行操作来捕获错误消息

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

    else:
        raise
Run Code Online (Sandbox Code Playgroud)