4

関数を作成しましたが、エラーが発生する可能性があります。そのため、例外を使用してすべてのエラーを同じメッセージに一般化したいと考えています。

ただし、この関数には複数のsys.exit()呼び出しが含まれています。

exceptその結果、エラーが発生した場合は、エラーが原因でない限り、コードをハンドラーにジャンプさせたいと考えていますsys.exit()。どうすればいいですか?

try:
   myFunction()
except:
   print "Error running myFunction()"

def myFunction():
   sys.exit("Yolo")
4

2 に答える 2

14

ブランケットexceptを使用するのではなく、代わりにキャッチを使用する必要がありExceptionます。

try:
    myFunction()
except Exception:
   print "Error running myFunction()"

Exceptionクラスは、ほとんどの例外の基本クラスですが、そうではありません SystemExitGeneratorExitおよび と一緒にKeyboardInterrupt、代わりにSystemExitのサブクラスです。BaseException

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
     +-- Everything else

Exception一方、 は のサブクラスでもBaseExceptionあり、残りの Python 例外クラスは、直接ではなく、そこから派生していBaseExceptionます。キャッチExceptionすると、派生したすべての例外がキャッチされますが、兄弟クラスはキャッチされません。

例外階層を参照してください。

そのため、ブランケットステートメントはほとんど使用しないでください。except:例外ハンドラーを常に特定の例外に制限するか、せいぜいcatchに制限してくださいException

于 2014-10-05T02:57:48.513 に答える