エラーが出てもプログラムを止めず最後まで実行したい


概要



コード0

try:
    コード1
except エラー名:
    コード2

コード3

のように書くと、まずコード0が実行され
次にコード1を実行しようとするが

コード1でエラーが起きなければコード1を実行し
その後コード3へ移り、後はそのまま

コード1でexcept直後に書かれたエラーが起きると
代わりにコード2を実行する
その後コード3へ移り、後はそのまま

となる


a = 1
try:
    print(a + 'A')
    print('tryを通りました')

except TypeError:
    print('exceptを通りました')

print('その後ここに来ます')

変数aに1を入れよ
以下を実行し、エラー「TypeError」が起きたらexcept TypeErrorの行へ移行せよ
    「a + 'A'」を出力せよ
    「tryを通りました」と出力せよ
tryでTypeErrorが起きたら以下を実行せよ
    「exceptを通りました」と出力せよ

「その後ここに来ます」と出力せよ

出力


exceptを通りました
その後ここに来ます

説明


上のコードでは
a = 1
の後
a + A
を実行しようとしている。つまり
1 + A
なのだが、数字と文字は足し算できないのでエラーになる。
try中にエラーが出るとexceptへすぐさま移動する

1.エラー名とは?

エラーが起きてプログラムが止まった時、コンソール画面に Traceback (most recent call last): File "C:\Users\Valley\Documents\MyProject_XP\python\pyMakeHtmls\test.py", line 27, in print(a + 'A') TypeError: unsupported operand type(s) for +: 'int' and 'str' のように出るのだが一番下の行の頭の TypeError というのがエラーの名前で、これをexcept直後に入れる名前。 コンソール画面からコピーペーストしてコードにいれればいい。

2.使い道

引数やプログラムコード以外に何か読む混む値があるとき たとえばウェブ上の文章をプログラム中に読み込んだ時に 特定の文字を読み込んだ時にだけエラーが発生する、というような場合がある このような場合はコードに問題がなくてもエラーが発生するかもしれないので エラーの種類があらかじめわかっていれば try exceptを使ってそのエラーが起きてもプログラムを最後まで実行できる

間違えやすい問題


try exceptで処理できるエラーはexcept直後に書かれたエラーのみで
当然それ以外のエラーがtry内で起きた場合は対処できない。
複数のエラーに対応したければその分exceptを増やせばよい
a = 1
b = '\u26C4'
try:
    writer = open('test.txt','w')
    writer.write(b)
    writer.close()
    print(a + 'A')
    print('tryを通りました')

except TypeError:
    print('exceptを通りました')
except UnicodeEncodeError:
    print('except2を通りました')

print('その後ここに来ます')
出力は except2を通りました その後ここに来ます
これはtry中に2回エラーが起こっている。最初は writer.write(b) で書き込めない文字をtest.txtに書き込もうとしているし、次に print(a + 'A') で数字と文字を足そうとしている ここでは最初にテキストに書き込もうとするエラーが発生したので except2を通りました、のほうに移動している