1. 一般的な例外クラス
AttributeError foo.x などのオブジェクトを持たないツリーにアクセスしようとしていますが、foo には属性 x
がありません##IndexError 添字インデックスがシーケンス境界を超えています (x が存在するときに x にアクセスしようとしているなど)要素は 3 つだけ [5]
KeyError 辞書に存在しないキーにアクセスしようとしました
KeyboardInterrupt Ctrl C が押されました
NameError はオブジェクトが割り当てられていない変数を使用しています
SyntaxError Python コードは不正であるため、コードをコンパイルできません (個人的にはこれだと思います)は構文エラーであり、正しく記述されていません)
TypeError 受信したオブジェクト タイプが要件を満たしていません
UnboundLocalError ローカル変数にアクセスしようとしていますこれは設定されていません。基本的に、同じ名前のグローバル変数を持つ別の変数があり、それにアクセスしていると思われるためです。
ValueError 呼び出し元が予期しない値を渡しています。値が正しい型であっても
2. 例外の例:
# TypeError:int类型不可迭代 for i in 3: pass # ValueError num=input(">>: ") #输入hello int(num) # NameError aaa # IndexError l=['egon','aa'] l[3] # KeyError dic={'name':'egon'} dic['age'] # AttributeError class Foo:pass Foo.x # ZeroDivisionError:无法完成计算 res1=1/0 res2=1+'str'
1. 基本的な構文を試してください。 ..Except
try: 被检测的代码块 except 异常类型: try中一旦检测到异常,就执行这个位置的逻辑
try: f = [ 'a', 'a', 'a','a','a', 'a','a',] g = (line.strip() for line in f) #元组推导式 print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) except StopIteration: f.close()
s1 = 'hello' try: int(s1) except IndexError as e: # 未捕获到异常,程序直接报错 print(e)
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) except Exception as e: print(e)
別の try/excel があります。ステートメント オプションの else 句を使用する場合は、すべての else 句の後に配置する必要があります。
else 句は、try 句で例外が発生しなかった場合に実行されます。
for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') f.close()
クリーンアップ動作の定義:
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) #except Exception as e: # print(e) else: print('try内代码块没有异常则执行我') finally: print('无论异常与否,都会执行该模块,通常是进行清理工作')
#基数 10 の int() のリテラルが無効です: 'hello'
4. 例外をスローします raise
Python は、raise ステートメントを使用して、指定された例外をスローします。
raise の構文形式は次のとおりです。
raise [Exception [, args [, traceback]]]
try: raise TypeError('抛出异常,类型错误') except Exception as e: print(e)
raise 唯一のパラメータは、スローされる例外を指定します。これは、例外インスタンスまたは例外クラス (つまり、Exception のサブクラス) である必要があります。
try: raise NameError('HiThere') except NameError: print('An exception flew by!') raise #An exception flew by! #Traceback (most recent call last): # File "", line 2, in ? #NameError: HiThere
5. カスタム例外
新しい例外クラスを作成することで、独自の例外を設定できます。例外クラスは、直接または間接的に Exception クラスを継承します。次に例を示します。
この例では、Exception クラスのデフォルトの __init__() がオーバーライドされます。
class EgonException(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg try: raise EgonException('抛出异常,类型错误') except EgonException as e: print(e) #抛出异常,类型错误
基本例外クラス
ほとんどの例外名は、標準の例外の名前付けと同様に、「Error」で終わります。
class Error(Exception): """Base class for exceptions in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the error """ def __init__(self, expression, message): self.expression = expression self.message = message class TransitionError(Error): """Raised when an operation attempts a state transition that's not allowed. Attributes: previous -- state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed """ def __init__(self, previous, next, message): self.previous = previous self.next = next self.message = message
6. Assert
アサーションは、プログラムの実行条件が満たされない場合、実行後にプログラムがクラッシュするのを待つことなく、直接エラーを返すことができます。
構文形式は次のとおりです。
assert expression
if not expression: raise AssertionError
assert の後にパラメータを続けることもできます。
assert expression [, arguments]
は次と同等です。
if not expression: raise AssertionError(arguments)
次の例では、現在のシステムが Linux かどうかを判断します。条件が満たされない場合は、次のコードを実行せずに例外が直接トリガーされます:
import sys assert ('linux' in sys.platform), "该代码只能在 Linux 下执行" # 接下来要执行的代码 # Traceback (most recent call last): # File "C:/PycharmProjects/untitled/run.py", line 2, in # assert ('linux' in sys.platform), "该代码只能在 Linux 下执行" # AssertionError: 该代码只能在 Linux 下执行
以上がPython での例外処理例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。