Python初心者のためのtry-except文【例外処理の基本】

ノートパソコン(薄黄)Python
スポンサーリンク
スポンサーリンク

「エラーが出ると処理が止まるけど、何かいい方法はないのかな。」

上記の疑問にお答えします。

try-except文を使えば、エラーが発生しても適切に処理することができます。

この記事では、Pythonでtry-except文を使いたいけど、よく分からないという人に向けて、次のことを解説しています。

  • try-except文とは
  • try-except文の書き方

 

「偉そうに語るおまえは誰やねん。」と思われるので、私のことも少し。

私のプログラミング歴は約5年で、本職での開発経験はありませんが、一応、IT業界に身を置いています。

今でもPythonなど、独学でプログラミングを勉強しつつ、そのスキルを活かして仕事の効率化を図ったり、ゲームをつくったりしています。

 

Pythonを学習しはじめのときは、自分の組んだプログラムがエラーを吐いて、冷や汗をかくことがあると思いますが、この記事を読めば、エラーを考慮したプログラミングができるようになります。

初心者の方でも分かるように努めて解説していますので、try-except文の基礎的な使い方をマスターして、ご自身のプログラミングに活用してください。

 

 

1.try-except文とは

try-except文とは、例外処理を実装するための構文です。

プログラム処理中にエラーを検出した場合、そのエラーに応じて実行される処理のことを例外処理と言います。

あらかじめ、起こりうるエラー想定し、どのように処理をするか決めておくことで、プログラム全体の処理を止めずに継続することができます。

エラーが発生しても適切に処理し、正常に終了させることができるので、つくる側だけでなく使う側も安心して使用できるようになります。

 

・例外って何

この記事にもたびたび登場する例外ですが、エラーと同じ意味と考えてOKです。

この記事内では、「例外=エラー」として扱います。

開発をやっておられるプロの方の中には、明確に定義している方もいると思いますが、調べた感じだとエラーと例外の境界線はあいまいで、個人や企業などによって解釈もまちまちです。

なので、この記事で定義を語ることはスルーします。

 

例外の種類は様々あるので、種類については代表的なものを紹介しておきます。

実際は、例外の種類によってtry-except文内の処理を分けることになります。

例外の種類説明
IndentationErrorif文などのインデントが正しくない。
TypeErrorデータ型の間違い。演算や組み込み関数の処理で、不適切な型が使われた。
IndexErrorリストなどに格納された値を、indexで取得する際に範囲外の位置(要素数)を指定した。
ValueError型は合っているが、不適切な値が使われた。
SyntaxError構文エラー。文法としての間違っている。
KeyError辞書(dict型)の値をキーを指定して取得する際に、存在しないキーを指定した。
AttributeError属性参照に関するエラー。プログラム上で存在しない(定義されていない)属性を参照しようとした場合など。

 

IndentationErrorやSyntaxErrorは、そもそもプログラムとしてよろしくないので、例外として処理するのではなく、事前に自分が書いたコードをチェックするべきです。

 

2.try-except文の書き方

try-except文の基本的な構文と、覚えておくと便利な構文をいくつか紹介します。

 

・基本的な書き方(try except)

最もシンプルな構文です。

tryで本来、実行させたい処理を記述し、exceptにエラーが発生したときの処理を記述します。

exceptでは、エラーを指定しておく必要があり、該当のエラーが発生した場合はexceptの処理が実行されます。エラーが発生しない場合や別のエラーが発生した場合は実行されません。

なお、exceptは複数記述できます。

 

以下にサンプルコードを記載しておきます。

サンプルコードでは、入力した値が変数 x と y に代入され、2つの変数を加算しています。

正しく数値が入力されればよいのですが、誤って文字を入力してしまった場合はエラーになります。

エラーになった場合、入力した人間にチェックを促すようにしています。

print("ひとつめの数字を入力してください")
x = input()  #たとえば"a"などの文字を入力するとエラーになります。

print("ふたつめの数字を入力してください")
y = input()

try:
    goukei = int(x) + int(y)  #変数xとyをint型に変換し加算
	
except ValueError:    #数値計算には不適切なためエラー
    print("入力した値は正しいですか?")

 

また、「except 例外の種類 as 変数名 :」とすると、エラーメッセージなどが格納された例外オブジェクトを変数に格納して使用することができます。

print("ひとつめの数字を入力してください")
x = input()  #たとえば"a"などの文字を入力するとエラーになります。

print("ふたつめの数字を入力してください")
y = input()

try:
    goukei = int(x) + int(y)  #変数xとyをint型に変換し加算
	
except ValueError as error:    #例外オブジェクトをerror変数に格納
    print(error)

 

ちなみに、「except  :」とすると、すべての例外を捕捉しますが、どんなエラーが発生しているのか見えないので、不具合やトラブルの原因になりかねません。あまりおすすめはしません。

print("ひとつめの数字を入力してください")
x = input()  #たとえば"a"などの文字を入力するとエラーになります。

print("ふたつめの数字を入力してください")
y = input()

try:
    goukei = int(x) + int(y)  #変数xとyをint型に変換し加算
	
except :    #すべての例外を捕捉
    print("入力した値は正しいですか?")

 

・正常時の処理を書く(else)

例外が発生しなかった場合に処理する内容を記述する場合、elseを使用します。

前出のサンプルコードに追記します。

print("ひとつめの数字を入力してください")
x = input()  #たとえば"a"などの文字を入力するとエラーになります。

print("ふたつめの数字を入力してください")
y = input()

try:
    goukei = int(x) + int(y)  #変数xとyをint型に変換し加算
	
except ValueError:    #数値計算には不適切なためエラー
    print("入力した値は正しいですか?")

else:
    print(goukei)    #正常処理として加算した値を表示

 

・例外を無視する(pass)

基本的にtry-except文では例外が発生したときの処理を記述する必要がありますが、何もさせたくないときはpassを使用します。

構文として記述が必要だが、何も実行させる必要がない場合に有効です。

print("ひとつめの数字を入力してください")
x = input()  #たとえば"a"などの文字を入力するとエラーになります。

print("ふたつめの数字を入力してください")
y = input()

try:
    goukei = int(x) + int(y)  #変数xとyをint型に変換し加算
	
except ValueError:    #数値計算には不適切なためエラー
    pass    #入力値に文字を入力しても、何もせずプログラムが終了

else:
    print(goukei)    #正常処理として加算した値を表示

 

・最後に必ず処理を実行させる(finally)

例外、正常処理を問わず必ず最後に実行させたい処理がある場合は、finallyを使用します。

使い方は以下のとおりです。

print("ひとつめの数字を入力してください")
x = input()  #たとえば"a"などの文字を入力するとエラーになります。

print("ふたつめの数字を入力してください")
y = input()

try:
    goukei = int(x) + int(y)  #変数xとyをint型に変換し加算
	
except ValueError:    #数値計算には不適切なためエラー
    print("入力した値は正しいですか?")

else:
    print(goukei)

finally:
    print("処理が終了しました")    #例外処理、正常処理のどちらが終了しても表示

 

・まとめ

以上、try-except文の基本的な使い方を解説しました。

例外処理を正しく理解することができれば、ユーザーにやさしいものづくりができます。

try-except文を活用して、エラーにうまく対応したソースコードが書けるようになりましょう。

 

もし、あなたが次のいずれかに当てはまるなら、『Pythonの独学ロードマップ【独学方法の経験談有り】』が参考になると思います。

  • 「何か作ってみたい!」と、これからPythonの学習を始めようとしている
  • Pythonの学習をはじめてみて、「このやり方であっているのかな?」と不安を感じている

 

Pythonで、Webスクレイピングやデスクトップアプリ作成のために独学した経験をもとに、Pythonの学習ステップをまとめています。

独学は孤独になりがちなので、学習の参考に是非ご覧ください。

Pythonの独学ロードマップ【独学方法の経験談有り】
Pythonの独学ロードマップについて解説しています。プログラミング未経験だった私の経験をもとに、独学の進め方や学習に必要な情報を提供しています。

 

ご清聴ありがとうございました。