lst
は空のリストです。 lst[0]
など、存在しない要素にアクセスしようとすると、IndexError
例外が発生します。その例外は、例外ハンドラで捕捉され、予期した結果が破損します。
まず、一般的には、ベア例外ハンドラを使用しないでください。例外ハンドラを処理する方法が分かっている例外に例外ハンドラを制限します。制限されていない例外ハンドラは、ここの場合のように、予期しない例外を隠すことを可能にします。
lst
にインデックスを格納する場合は、リストの長さが十分であることを確認するか、append()
またはinsert()
を使用してリストの末尾または冒頭に追加します。
Exception('spam', 'eggs')
ZeroDivisionError('division by zero',)
:そのコードの出力を実行する
for i in range(2):
try:
if i == 0:
raise Exception('spam', 'eggs')
else:
1/0 # cause ZeroDivisionError
except Exception as e:
print(repr(e))
:独自の例外を作成するException
を使用し
は
しばしばそれが困難な他の人からあなたの例外を区別することができますので、いずれかを実行するための最良のものではありません
ZeroDivisionError
はException
のサブクラスなので、ハンドラによってもキャッチされます。今、あなたは簡単にあなたがどのように処理するかを知っている例外を確認することができ
class MyException(Exception):
pass
:このコードを実行する
for i in range(2):
try:
if i == 0:
raise MyException('spam', 'eggs')
else:
1/0 # cause ZeroDivisionError
except MyException as e:
print(repr(e))
:
MyException('spam', 'eggs')
Traceback (most recent call last):
File "", line 6, in
ZeroDivisionError: division by zero
これを解決するには、あなた自身
Exception
サブクラスを作成することができます
は、カスタム例外がキャッチされて処理されることを示しますが、予期しない例外は発生しません。あなたが予期しないものを扱うようにしたい場合は、あまりにも、その後後の最初の2番目の例外ハンドラを追加:あなたは例外扱い
except MyException as e:
print(repr(e))
except Exception as e:
print('Unexpected exception', e)
raise
例外が発生するためです。 – user2357112
ブロックを除いて、それは 'IndexError'を含む_all_エラーをキャッチします。 – Lafexlos
**裸の句を使用しないでください** –