Pythonの例外処理について

Pythonの例外処理について

例外処理とは、エラーが起こりそうな特定のコードが実行された時に、エラーになった場合に例外ハンドラーを準備しとおいて、そのエラーをキャッチする仕組みです。 具体的にはtryブロックに問題が起こりそうなコードを記述しておき、エラーが起こると例外が生成されてexcept ブロックのコードが実行されて何が起こったか表示させます。 もしtryブロックで何も起こらなければexcept ブロックは無視されます。

例外処理してない例

def divide(num):
  return 20 / num
print(divide(2))
print(divide(4))
print(divide(0))

結果

10.0
5.0
---------------------------------------------------------------------------
ZeroDivisionError                         Traceback (most recent call last)
<ipython-input-1-368582b32e45> in <module>()
      3 print(divide(2))
      4 print(divide(4))
----> 5 print(divide(0))

<ipython-input-1-368582b32e45> in divide(num)
      1 def divide(num):
----> 2   return 20 / num
      3 print(divide(2))
      4 print(divide(4))
      5 print(divide(0))

ZeroDivisionError: division by zero

例外処理の例

def divide(num):
  try: return 20 / num
  except ZeroDivisionError:
    print('引数が不正です。')
print(divide(2))
print(divide(4))
print(divide(0))

結果

10.0
5.0
引数が不正です。
None

組み込み例外の種類

組み込み例外の種類は70種類以上あります。代表的なものとして以下のようなものがあります。

  • ZeroDivisionError
  • NameError
  • TypeError

例外の明細は「組み込み例外」を参考にしてください。

なお、urlopen はレスポンスを処理できなかった場合、 URLError を送出します (ふつうの Python API では、組み込み例外の ValueError, TypeError などが送出されます)。このようにライブラリを読み込んだ場合、組み込み例外とは別に例外が用意されています。

組み込み例外のクラス階層

「組み込み例外」のページに記載されていますが、組み込み例外のクラス階層は以下のとおりです:

BaseException
+– SystemExit
+– KeyboardInterrupt
+– GeneratorExit
+– Exception
+– StopIteration
+– StopAsyncIteration
+– ArithmeticError
| +– FloatingPointError
| +– OverflowError
| +– ZeroDivisionError
+– AssertionError
+– AttributeError
+– BufferError
+– EOFError
+– ImportError
| +– ModuleNotFoundError
+– LookupError
| +– IndexError
| +– KeyError
+– MemoryError
+– NameError
| +– UnboundLocalError
+– OSError
| +– BlockingIOError
| +– ChildProcessError
| +– ConnectionError
| | +– BrokenPipeError
| | +– ConnectionAbortedError
| | +– ConnectionRefusedError
| | +– ConnectionResetError
| +– FileExistsError
| +– FileNotFoundError
| +– InterruptedError
| +– IsADirectoryError
| +– NotADirectoryError
| +– PermissionError
| +– ProcessLookupError
| +– TimeoutError
+– ReferenceError
+– RuntimeError
| +– NotImplementedError
| +– RecursionError
+– SyntaxError
| +– IndentationError
| +– TabError
+– SystemError
+– TypeError
+– ValueError
| +– UnicodeError
| +– UnicodeDecodeError
| +– UnicodeEncodeError
| +– UnicodeTranslateError
+– Warning
+– DeprecationWarning
+– PendingDeprecationWarning
+– RuntimeWarning
+– SyntaxWarning
+– UserWarning
+– FutureWarning
+– ImportWarning
+– UnicodeWarning
+– BytesWarning
+– ResourceWarning