39

Pythonでエラーをキャッチすることは可能ですか?すべての例外が同じフォールバックを持つため、特定の例外がどのようなものになるかは気にしません。

4

8 に答える 8

57

単独で使用exceptすると、セグメンテーション違反以外の例外がキャッチされます。

try:
    something()
except:
    fallback()

スクリプトを終了するためにKeyboardInterruptを使用する必要がある場合は、KeyboardInterruptを個別に処理することをお勧めします。

try:
    something()
except KeyboardInterrupt:
    return
except:
    fallback()

ここでキャッチできる基本的な例外の素晴らしいリストがあります。また、例外からコールスタックを取得するためのトレースバックモジュールも非常に気に入っています。traceback.format_exc()またはtraceback.print_exc()例外ハンドラで試してください。

于 2011-07-25T14:28:13.227 に答える
39
try:
    # do something
except Exception, e:
    # handle it

Python 3.xの場合:

try:
    # do something
except Exception as e:
    # handle it
于 2011-07-25T14:29:17.283 に答える
16

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
于 2011-07-25T18:25:33.840 に答える
6

バウンティテキストの引用:

キーボード割り込みやシステム出口などの奇妙なもの(たとえば、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)
于 2020-10-01T20:50:07.803 に答える
2

自分で処理したい例外のタイプは言うまでもありません。

これを試して:

    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を参照してください。

于 2020-10-05T14:45:25.093 に答える
1

以下は私のためだけに機能しました(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 ) 
于 2020-08-21T08:47:40.657 に答える
0
# 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
于 2020-10-06T11:17:31.100 に答える
0

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)

これらは、標準ライブラリで定義されていないカスタム例外です。カスタムクラスを作成するために実行できる手順は次のとおりです。

  1. Exceptionクラスをサブクラス化します。
  2. 選択した新しいExceptionクラスを作成します。
  3. コードを記述し、try ...exceptフローを使用して、カスタム例外をキャプチャして処理します。
于 2020-10-06T11:36:35.297 に答える