iMind Developers Blog

iMind開発者ブログ

Pythonのbuilt-in Error/Exception一覧

概要

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 記事投稿