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をインスタンス化する行で例外 ( ) が発生し、main() の例外ハンドラが出力文字列を出力することがいつ実行されるかを期待します。ただし、そうではありません。未処理の例外ハンドラによって処理されています。最終的に何が起こるかは、文字列が出力されていることです。なぜではないPdbalogException("Invalid Logtype")except "Invalid Logtype""Exiting...""Unhandled exception"

    except "Invalid Logtype":

例外を処理しますか?

古いバージョンの python (2.4) を使用しています。

4

2 に答える 2

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
于 2013-09-26T17:56:07.773 に答える
4

代わりにこれを試してください:

class InvalidLogType(Exception):
   pass

それから

raise InvalidLogType()

それから

except InvalidLogType:
   etc
于 2013-09-26T17:55:45.287 に答える