概要
Pythonの例外を投げる時に「どれ使おう?」と迷うことが多いので一覧を作成する。
出しやすい例外については実際に発生するサンプルコードを掲載。
バージョン情報
Python 3.6.8
built-inの一覧表示
ipythonより下記のhelpから表示。
help(__builtins__)
一覧
error/exception | 概要 |
---|---|
BaseException | すべてのExceptionの基底クラス |
Exception | すべてのnon-exitなExceptionの基底クラス |
ArithmeticError | OverflowErrorやZeroDivisionErrorの規定クラス |
FloatingPointError | 未使用 |
OverflowError | 演算でoverflow |
ZeroDivisionError | 0除算 |
AssertionError | assert失敗時に発生 |
AttributeError | attributeの参照や代入に失敗 |
BufferError | buffer操作失敗 |
EOFError | 不正なEOF検知時 |
ImportError | ModuleNotFoundErrorの親クラス |
ModuleNotFoundError | importモジュールが見つからない |
LookupError | IndexError, KeyErrorの親クラス |
IndexError | 範囲外のindexを参照 |
KeyError | 存在しない辞書のキーを参照 |
MemoryError | メモリ不足 |
NameError | 存在しない名前(ローカル変数等)を参照 |
UnboundLocalError | 代入されていない変数を参照 |
OSError | システム関数エラー |
BlockingIOError | ノンブロッキング操作をブロック |
ChildProcessError | 子プロセス操作のエラー |
ConnectionError | コネクションエラー |
BrokenPipeError | brokenなコネクションを操作 |
ConnectionAbortedError | abortしたコネクションを操作 |
ConnectionRefusedError | refuseされたコネクションを操作 |
ConnectionResetError | resetされたコネクションを操作 |
FileExistsError | ファイルが既にある |
FileNotFoundError | ファイルがない |
InterruptedError | 中断された |
IsADirectoryError | ディレクトリです |
NotADirectoryError | ディレクトリじゃない |
PermissionError | 権限ない |
ProcessLookupError | プロセスがない |
TimeoutError | タイムアウトした |
ReferenceError | 弱参照で回収済みの参照にアクセス |
RuntimeError | 他に分類できない実行エラー |
NotImplementedError | 未実装エラー |
RecursionError | 再帰回数上限超え |
StopAsyncIteration | イテレーション停止(anextで使う) |
StopIteration | イテレーション停止(nextで使う) |
SyntaxError | 構文エラー |
IndentationError | インデントがおかしい |
TabError | インデントでタブとスペースが一貫しない |
SystemError | システムエラー |
TypeError | 型がおかしい |
ValueError | 値がおかしい |
UnicodeError | Unicodeのencode/decodeでのエラー |
UnicodeDecodeError | Unicodeのdecodeでのエラー |
UnicodeEncodeError | Unicodeのencodeでのエラー |
UnicodeTranslateError | Unicodeの変換エラー |
GeneratorExit | 閉じたgeneratorへの操作 |
KeyboardInterrupt | Ctrl+c等のキーボードでの停止 |
SystemExit | sys.exit()でのプログラムの停止 |
OverflowErrorの例
94810.098141 ** 1000 #=> OverflowError: (34, 'Numerical result out of range')
OverflowErrorの例
94810.098141 ** 1000 #=> OverflowError: (34, 'Numerical result out of range')
ZeroDivisionErrorの例
3 / 0 #=> ZeroDivisionError: division by zero
AssertionErrorの例
assert 1 == 0 #=> AssertionError:
AttributeErrorの例
class Foo(): pass Foo().bar #=> AttributeError: 'Foo' object has no attribute 'bar':
BufferErrorの例
bufferを一度exportしてからwrite。
b = io.BytesIO(b'hello') b.getbuffer() b.write(b'hello world') #=> BufferError: Existing exports of data: object cannot be re-sized
EOFErrorの例
input()の入力待ちで何も入力せずCtrl+Dする。
input() #=> EOFError:
ModuleNotFoundErrorの例
存在しないモジュールをimportする。
import hoge #=> ModuleNotFoundError: No module named 'hoge'
IndexErrorの例
arr = [1, 2, 3] arr[4] #=> IndexError: list index out of range
KeyErrorの例
dic = {'foo': 'bar'} dic['baz'] #=> IKeyError: 'baz'
MemoryErrorの例
['foobar'] * (1024 ** 4) #=> MemoryError:
NameErrorの例
存在しない変数を参照。
bar
#=> NameError: name 'bar' is not defined
UnboundLocalErrorの例
関数の中でglobalせずに外の変数をインクリメントする。
i = 0 def incl(): i += 1 incl() #=> UnboundLocalError: local variable 'i' referenced before assignment
FileExistsErrorの例
既にあるディレクトリを生成。
os.mkdir('tmp') #=> FileExistsError: [Errno 17] File exists: 'tmp'
FileNotFoundErrorの例
with open('foo.txt', 'rt') as f: f.read() #=> FileNotFoundError: [Errno 2] No such file or directory: 'foo.tx
IsADirectoryErrorの例
tmpというディレクトリがある場合に、tmpというファイルにwriteしにいく。
with open('tmp', 'wt') as f: f.write('foo') #=> IsADirectoryError: [Errno 21] Is a directory: 'tmp'
NotADirectoryErrorの例
foo.txtというファイルが存在する場合に、同ファイルにlistdirする。
os.listdir('foo.txt') #=> NotADirectoryError: [Errno 20] Not a directory: foo.txt'
RecursionErrorの例
エンドレス再帰。
def foo(i): foo( i + 1) foo(0) #=> RecursionError: maximum recursion depth exceeded
TypeErrorの例
s = 'foo' s += 1 #=> TypeError: must be str, not int
改定履歴
Author: Masato Watanabe, Date: 2019-05-06 記事投稿