LoginSignup
0
0

Pythonの例外回避。

Last updated at Posted at 2023-11-25

はじめに

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

戻る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0