誰かがこれが重複していると言われる前に、私は似たような質問を見て、私を助けなかったからだとは思わない!Python/Flask - ValueError:閉じたファイルに対する入出力操作
私はPythonでFlaskサーバーを作成していますが、私はpdfを示すURLを持つことができる必要があります。これは、私はそれがpdfファイルpdffile.pdf
が表示されます/pdf
に行くときにそれを作ることになっている
@app.route('/pdf')
def pdfStuff():
with open('pdffile.pdf', 'rb') as static_file:
return send_file(static_file, attachment_filename='pdffile.pdf')
:
は、私は次のコードを使用しようとしました。ValueError: I/O operation on closed file
どのようにこれが事実である:私は、コードを実行したときに、私はこのエラーを取得するため
しかし、これは動作しませんか?私のreturn文はwith文の中にあるので、ファイルを開いてはいけませんか?
私は通常のstatic_file = open(...)
を使用しようとtry
とfinally
ステートメントを使用し、次のように:
static_file = open('pdffile.pdf','rb')
try:
return send_file(static_file, attachment_filename='pdffile.pdf')
finally:
static_file.close()
同じエラーが上記のコードで起こる、と私はなぜわかりません。誰かが私が間違っていることを知っていますか?
申し訳ありません私はばかだと私は間違いをした何かが簡単です!
ありがとうございます!
コンテキストマネージャは、関数が終了する前にファイルが閉じられることを保証します。ファイルハンドルをそのように戻すことはできません。代わりにファイル名を渡すのはなぜですか? – jonrsharpe
私にそのことを知らせてくれてありがとう!私は今それを試してみるでしょう。 – David
@jonrsharpeニース、それは動作します!私はあなたが実際のファイルの代わりにファイル名の文字列を渡すことができたのか分からなかった。どうもありがとうございました! – David