Pythonでエラーをキャッチすることは可能ですか?すべての例外が同じフォールバックを持つため、特定の例外がどのようなものになるかは気にしません。
8 に答える
単独で使用except
すると、セグメンテーション違反以外の例外がキャッチされます。
try:
something()
except:
fallback()
スクリプトを終了するためにKeyboardInterruptを使用する必要がある場合は、KeyboardInterruptを個別に処理することをお勧めします。
try:
something()
except KeyboardInterrupt:
return
except:
fallback()
ここでキャッチできる基本的な例外の素晴らしいリストがあります。また、例外からコールスタックを取得するためのトレースバックモジュールも非常に気に入っています。traceback.format_exc()
またはtraceback.print_exc()
例外ハンドラで試してください。
try:
# do something
except Exception, e:
# handle it
Python 3.xの場合:
try:
# do something
except Exception as e:
# handle it
sys.excepthookも確認することをお勧めします。
例外が発生してキャッチされない場合、インタープリターは、例外クラス、例外インスタンス、およびトレースバックオブジェクトの3つの引数を使用してsys.excepthookを呼び出します。インタラクティブセッションでは、これは制御がプロンプトに戻る直前に発生します。Pythonプログラムでは、これはプログラムが終了する直前に発生します。このようなトップレベルの例外の処理は、別の3つの引数関数をsys.excepthookに割り当てることでカスタマイズできます。
例:
def except_hook(type, value, tback):
# manage unhandled exception here
sys.__excepthook__(type, value, tback) # then call the default handler
sys.excepthook = except_hook
バウンティテキストの引用:
キーボード割り込みやシステム出口などの奇妙なもの(たとえば、HPCマネージャーがエラーをスローした場合)でも例外をキャプチャし、例外オブジェクトeへのハンドルを取得できるようにしたいです。eを処理してカスタム印刷したり、メールで送信したりしたい
例外階層を見てください、あなたはキャッチする必要がありますBaseException
:
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
KeyboardInterrupt
これにより、、、SystemExit
およびがキャプチャさGeneratorExit
れます。これらはすべて、から継承されますが、BaseException
からは継承されません。Exception
try:
raise SystemExit
except BaseException as e:
print(e.with_traceback)
自分で処理したい例外のタイプは言うまでもありません。
これを試して:
try:
#code in which you expect an exception
except:
#prints the exception occured
発生した例外のタイプを知りたい場合:
try:
#code in which you expect an exception
except Exception as e:
print(e)
#for any exception to be catched
詳細な説明については、この https://www.tutorialspoint.com/python/python_exceptions.htmを参照してください。
以下は私のためだけに機能しました(PY2とPY3の両方で):
try:
# (Anything that produces any kind of error)
except:
ertype = sys.exc_info()[0] # E.g. <class 'PermissionError'>
description = sys.exc_info()[1] # E.g. [Errno 13] Permission denied: ...
# (Handle as needed )
# in python 3
# if you want the error
try:
func()
except Exception as e:
exceptionFunc(e)
# if you simply want to know an error occurs
try:
func()
except:
exceptionFunc()
# if you don't even wanna do anything
try:
func()
except:
pass
Pythonの組み込み例外
組み込みの例外クラスは、エラークラスを定義する基本エラークラスと、時々発生する可能性が高い例外を定義する具象エラークラスに分けられます。
buit-In例外に関するより詳細なドキュメントは、[https://docs.python.org/3/library/exceptions.html]にあります。
カスタム例外
特定のアプリケーションの状況に合わせるために使用されます。たとえば、料理アプリを開発するためのクラスではレシピが無効であるため、RecipeNotValidErrorとして独自の例外を作成できます。
実装
class RecipeNotValidError(Exception):
def __init__(self):
self.message = "Your recipe is not valid"
try:
raise RecipeNotValidError
except RecipeNotValidError as e:
print(e.message)
これらは、標準ライブラリで定義されていないカスタム例外です。カスタムクラスを作成するために実行できる手順は次のとおりです。
- Exceptionクラスをサブクラス化します。
- 選択した新しいExceptionクラスを作成します。
- コードを記述し、try ...exceptフローを使用して、カスタム例外をキャプチャして処理します。