1. ホーム
  2. python

[解決済み] Python 3 の処理エラー TypeError: BaseException を継承しないクラスのキャッチは許可されていません。

2022-02-08 01:13:08

質問

このコードを実行すると

i=0
while i<5:
    i=i+1;
    try:
        SellSta=client.get_order(symbol=Symb,orderId=SellOrderNum,recvWindow=Delay)
    except client.get_order as e:
        print ("This is an error message!{}".format(i))
#End while

こんなエラーが出ました。

TypeError: catching classes that do not inherit from BaseException is not allowed

このトレッドを読みました ジェネレータのthrowメソッド使用時に例外TypeErrorの警告が表示される場合とされない場合がある。 そして、こちらも BaseExceptionを継承していないため、モック化した例外をキャッチできない これも読んでください https://medium.com/python-pandemonium/a-very-picky-except-in-python-d9b994bdf7f0

このコードでなんとなく直りました。

i=0
while i<5:
    i=i+1;
    try:
        SellSta=client.get_order(symbol=Symb,orderId=SellOrderNum,recvWindow=Delay)
    except:
        print ("This is an error message!{}".format(i))
#End while

結果はエラーを無視して次のwhileに進みますが、私はエラーをキャッチしてそれを表示したいのです。

どのように解決するのですか?

私は 質問 をスペイン語スタックにすると、より良い結果が得られます。 翻訳してまとめると 例外節で、どの例外を捕捉するかを示さなければならないため、エラーが発生します。例外は、基本クラスExceptionを(直接または間接的に)継承するクラスです。

代わりに、私はpythonが例外の名前を期待するclient.get_orderを置きました。あなたが置いたものはオブジェクトのメソッドであり、Exceptionを継承するクラスではありません。

解決策はこのようになります。

try:
    SellSta=client.get_order(symbol=Symb,orderId=SellOrderNum,recvWindow=Delay)
except Exception as e:
    if e.code==-2013:
        print ("Order does not exist.");
    elif e.code==-2014:
        print ("API-key format invalid.");
    #End If

での例外に対応するコードが必要です。 ここで