日々のいろいろ

日々を綴ったほとんど日記

Pythonで例外処理をする方法

まえがき

こんなコードがあります。

print('整数を入力してください')
anykey = int(input())
print(anykey)

>>>整数を入力してください
>>>abc
>>>ValueError~~~

例えば、このコードのint(input())に対してstr型などで入力を行います。
想定していた入力が行われなかったので'ValueError'が出ます。
そして処理も中断してしまう訳です。
それってユーザーライクではないですよね?
エラーが出たならエラーが出た時の処理をしてくれよと思ったので今回は例外処理を実装してみようと思います。

環境

例外処理

「整数が入力されたら'整数が入力されました'と出力し、整数以外の時は'整数ではありません'と出力するプログラム」
このプログラム作成するとして、まず失敗する例を書いてみましょう。

print('整数を入力してください')
anykey = int(input())
if anykey == int(anykey): #anykeyが整数か確認
    print('整数が入力されました')
else:
    print('整数ではありません') #ValueErrorが出るので実行されない処理

まえがき同様、整数以外の入力があるとValueErrorが出ます。
整数以外を絶対に入力できない環境であれば問題ないのですが、中々いないですよね。
もうひとつ失敗する例を出しましょう。

print('整数を入力してください')
anykey = input() #str型の入力
if anykey == int(anykey): #anykeyがstr型なのでTrueにならない処理
    print('整数が入力されました')
else:
    print('整数ではありません') #入力がstr型なので何を入力しても出力される処理

こちらはどうでしょう。
str型で入力を受け付けているので整数以外の入力でもValueErrorは出ません。
しかし、整数を入力された際もstr型として扱われる為

if anykey == int(anykey):

がTrueになることはありません。

では、どうするか。

Try:
except ErrorName:

を使うようです。
実際に使ってみましょう。

print('整数を入力してください')
try:
    anykey = int(input()) #例外が発生する可能性のあるライン
    if anykey == int(anykey): #anykeyが整数か確認
        print('整数が入力されました')
except ValueError: #想定されるエラー
    print('整数ではありません') #例外が発生したら行う処理

例外が発生した場合、except ValueError:以下の処理が行われる為、これでエラーメッセージではなく、整数ではありませんと出力されます。

ユーザー定義の例外処理を作成することも可能だとドキュメントに書いていたので、そちらも上手く使えるようになりたいですね。

参考ページ

docs.python.org

pycarnival.com