Re:ゼロから始める文系プログラマ

未経験がプログラミングを通して人生を変える

【Python・ファイル操作】~ファイル操作の例外処理~


スポンサードリンク
 

f:id:ShotaNukumizu_1000:20210405111435p:plain

おはようございます!Shotaです。

今日も早速、Pythonに関する記事を書いていきます。

今日は「ファイル操作の例外処理」について解説していきます。

 

【目次】

 

 

ファイルアクセスの例外

ファイルアクセスは、openにより取得したファイルオブジェクトを以下に使いこなすかがポイントです。

 

例外処理

まず最初に、例外について説明していきます。ファイルを利用する処理では、常に正常にファイルアクセスが行えるとは限りません。様々な原因によりアクセス時に例外が発生し中断することがよくあります。

ここで、ファイル利用時の主な発生例外についてまとめておきましょう。

 

 ▼主に発生する例外リスト

f:id:ShotaNukumizu_1000:20210519090747p:plain



これらの例外は、openでファイルを開いてからcloseするまでの中で発生します。これらの例外を処理するため。ファイルアクセス全体をtry内で行うようにしたほうがいいでしょう。

 

以下のコードを書いて実行してみましょう。

 

#例外が発生するプログラム
import codecs
with codecs.open('sample.txt', 'r', 'utf-8') as f:
    x = 1
    while True:
        msg = input('input text:')
        if msg == '':
            break
        f.write(f'{x}: {msg}\n')
        x += 1
    print('save all messages.')

 

▼実行結果

input text:aa
Traceback (most recent call last):
  File "sample.py", line 9, in <module>
    f.write(f'{x}: {msg}\n')
  File "\codecs.py", line 721, in write
    return self.writer.write(data)
  File "\codecs.py", line 378, in write
    self.stream.write(data)
io.UnsupportedOperation: write

 

 万が一例外が発生すると、コマンドプロンプトに出力されている例外が非常にわかりにくいです。具体的なエラーを特定して、コードを正常に動作させるためにはtry構文を使って書くしかありません。

 

上のコードにtry構文を混ぜてより丁寧に書いてみましょう。

 

#例外が発生するプログラム
import codecs
try:
    with codecs.open('sample.txt', 'r', 'utf-8') as f:
        x = 1
        while True:
            msg = input('input text:')
            if msg == '':
                break
            f.write(f'{x}: {msg}\n')
            x += 1
        print('save all messages.')
        
except Exception as e:
    print(f'[ERROR] {type(e)}:{str(e)}')

 

▼実行結果

input text:aaa
[ERROR] <class 'io.UnsupportedOperation'>:write

 

 このように書くと、コマンドプロンプトに表示される内容をスッキリさせることができます。これだと、どの場所で例外が発生しているかはわかりませんが、どのタイプの例外であるかやその内容を明確に記すことができます。

 

この部分で例外を出力させることができます。

except Exception as e: #例外Exceptionをeとして表示
    print(f'[ERROR] {type(e)}:{str(e)}')

 

 これを実行したい処理の後ろにそのまま書くことで、エラー内容を特定できます。

 

〈果たしている役割〉

「type(e)」:エラーの種類を特定

「str(e)」: エラーの内容を特定

 

このように例外を明確にすることは例外処理を行う上でめちゃくちゃ重要なことです。面倒に思われるかもしれませんが、例外を特定できないとプログラムを正確に動作できないので何回も手を動かして覚えていきましょう。

 

まとめ

【本日のまとめ】

  • ファイルアクセスは様々な例外が発生する。ファイルアクセスする全体の処理try内で何度も実行させていこう。
  • 例外を明確にすることは例外処理を行う上ではめちゃくちゃ大事。例外を特定できないとプログラムを正確に動作できない。 

 

 

本ブログでは、こんな感じでPythonにまつわる情報や基本的な知識、Pythonの操作方法やニュースをたくさん紹介していきます。毎週日曜日に、普段とは趣向を変えて有名な自己啓発本・ビジネス書を要約・考察するブログを書いていきます。

この記事がいいと思った人はSNSにシェアしてくれると非常に嬉しいです!

明日も引き続きファイル操作について解説していきます。

今日も最後まで読んでくださりありがとうございました!

 

【参考図書】

gihyo.jp