with 構文
with 構文
I/O では、stream を開いて、一連の処理をした後で、例外の有無にかかわらず stream を閉じるってプログラムの形は多くなります。 先ほども、socket を開いたり file を開いたりしてましたね。
def send_file(sock: socket, filename):
# ファイルを開いて
with open(filename, 'rb') as file_in:
while True:
# ファイルの中身を
data = file_in.read(BUF_SIZE)
if not data: # ファイルを読み終わったら終了
break
# socket から送る
sock.sendall(data)
単に最初に open
呼出しして、最後に close
呼出しするのと違い、
プログラムが途中で例外を起こすような場合でも、close
を実行してくれます。
今回はあまり取り上げませんが、python でも例外の仕組みがあります。
file_in = open(filename, 'rb')
try:
while True:
data = file_in.read(BUFSIZE)
if not data:
break
sock.sendall(data)
except Exception as excep:
# handle が書きたい場合
finally:
file_in.close()
のように記述可能です。