はじめに
Pythonで、該当のファイルがない、該当の値がないことによって例外が発生するとスクリプトが中断される。例外で中断することなく継続処理することのできるtry-exceptが便利なのでまとめる。
目次
try-except
例えばこのスクリプトを実行すると例外が発生し、処理が中断される。
dic={'key1':'val1','key2':'val2','key3':'val3'}
print(dic['key5'])
print('処理完了')
# ----------------------------------------------
# print(dic['key5'])
# KeyError: 'key5'
下記のように、try-exceptを使い、exceptに例外処理を記述すると、例外が処理されてスクリプトは継続できる。
dic={'key1':'val1','key2':'val2','key3':'val3'}
try:
print(dic['key5'])
except:
print('該当するkeyはありません。')
print('処理完了')
# -------------------------------------------------------------------
# 該当するkeyはありません。
# 処理完了
try-exceptを使ってファイルの新規作成
追記を想定しているExcelファイルで、ファイルが存在しなければ新規作成する場合の例。
import openpyxl as px
# ファイルが存在しなければ例外処理で新規作成
try:
wb = px.load_workbook('test.xlsx')
except:
print('ファイルがないので新規作成します。')
wb = px.Workbook()
#-------------------
# ここにExcelの処理を記述
#-------------------
#Save
wb.save('test.xlsx')
Exceptionで例外の内容確認
exceptした時のエラーの内容を確認する場合は、基底クラスException
を使う。
try:
print(dic['key5'])
except Exception as e:
print(f'{e=}')
print('該当するkeyはありません。')
print('処理完了')
# -------------------------------------------------------------------
# e=KeyError('key5')
# 該当するkeyはありません。
# 処理完了
import openpyxl as px
## ファイルが存在しなければ例外処理で新規作成
try:
wb = px.load_workbook('test.xlsx')
except Exception as e:
print(f'{e=}')
print('ファイルがないので新規作成します。')
wb = px.Workbook()
#-------------------
# ここにExcelの処理を記述
#-------------------
#Save
wb.save('test.xlsx')
# -------------------------------------------------------------------
# e=FileNotFoundError(2, 'No such file or directory')
# ファイルがないので新規作成します。
BaseExceptionですべての例外を取得する
KeyboardInterrupt
含めすべての例外を取得することができる。
try:
input('CTRL+Cで終了してください。')
except Exception as e:
print(f'{e=}')
print('到達しない')
# -------------------------------------------------------------------
# Traceback (most recent call last):
# ...
# input('CTRL+Cで終了してください。')
# KeyboardInterrupt
# ^C
try:
input('CTRL+Cで終了してください。')
except BaseException as e:
print(f'{e=}')
print('到達する')
# -------------------------------------------------------------------
# CTRL+Cで終了してください。e=KeyboardInterrupt()
# 到達する
例外一覧
参考
BaseException
├── BaseExceptionGroup
├── GeneratorExit
├── KeyboardInterrupt
├── SystemExit
└── Exception
├── ArithmeticError
│ ├── FloatingPointError
│ ├── OverflowError
│ └── ZeroDivisionError
├── AssertionError
├── AttributeError
├── BufferError
├── EOFError
├── ExceptionGroup [BaseExceptionGroup]
├── 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
├── StopAsyncIteration
├── StopIteration
├── SyntaxError
│ └── IndentationError
│ └── TabError
├── SystemError
├── TypeError
├── ValueError
│ └── UnicodeError
│ ├── UnicodeDecodeError
│ ├── UnicodeEncodeError
│ └── UnicodeTranslateError
└── Warning
├── BytesWarning
├── DeprecationWarning
├── EncodingWarning
├── FutureWarning
├── ImportWarning
├── PendingDeprecationWarning
├── ResourceWarning
├── RuntimeWarning
├── SyntaxWarning
├── UnicodeWarning
└── UserWarning