例外処理とは、エラーが起こりそうな特定のコードが実行された時に、エラーになった場合に例外ハンドラーを準備しとおいて、そのエラーをキャッチする仕組みです。 具体的には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
+– 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