PythonでStandardError例外をキャッチする方法は?
StopIteration、StandardError、Warningの基本クラスであるExceptionクラスがあります。すべての標準エラーは、StandardErrorから派生しています。 ArithmeticErrror、AttributeError、AssertionErrorなどの一部の標準エラーは、基本クラスStandardErrorから派生しています。
属性の参照または割り当てが失敗すると、AttributeErrorが発生します。たとえば、存在しない属性を参照しようとする場合:
指定されたコードを書き直して例外をキャッチし、そのタイプを認識します。
import sys try: class Foobar: def __init__(self): self.p = 0 f = Foobar() print(f.p) print(f.q) except Exception as e: print e print sys.exc_type print 'This is an example of StandardError exception'
0 Foobar instance has no attribute 'q' <type 'exceptions.AttributeError'> This is an example of StandardError exception
-
PythonでKeyError例外をキャッチする方法は?
辞書のキーとして値が見つからない場合、KeyErrorが発生します。指定されたコードは、例外をキャッチしてそのタイプを見つけるために次のように書き直されます。 例 import sys try: s = {'a':5, 'b':7}['c'] except: print (sys.exc_info()) 出力 (<type 'exceptions.KeyError'>, KeyError('c',), <traceback object at 0x0000000003203748&g
-
リスト内包表記でPython例外をキャッチする方法は?
Pythonには例外を処理または無視できる組み込み関数がないため、リスト内包には1つ以上の式が含まれているため、リスト内包のすべての例外を処理することはできません。ステートメントのみが例外をキャッチ/無視/処理できます。 例外が発生しやすい部分式の評価を関数に委任することは、実行可能な回避策の1つです。その他は、例外を発生させる可能性のある値のチェックです。 この問題を処理する方法は、次のコードを使用することです。 例 foo = (5,7,1,0,9) def bar(self): try: return [1/i for i in foo] except ZeroDivisionErro