同じファイルにオープン/クローズ/ readlineの/書き込みをインターリーブしながら、PythonはIOエラーが発生します

StackOverflow https://stackoverflow.com/questions/872680

  •  22-08-2019
  •  | 
  •  

質問

私が学んでいるのPythonを-これは私にIOエラーを与える -

f = open('money.txt')
while True:
    currentmoney = float(f.readline())
    print(currentmoney, end='')
    if currentmoney >= 0:
        howmuch = (float(input('How much did you put in or take out?:')))

        now = currentmoney + howmuch
        print(now)
        str(now)
        f.close()
    f = open('money.txt', 'w')
    f.write(str(now))
    f.close()

ありがとうございます。

役に立ちましたか?

解決

while Trueは、あなたがbreakとそれを破るしない限り、永遠にループする予定です。

I / Oエラーがあなたが最後のものは、ファイルを閉じf.close()、したらあなたはループを実行したときので、おそらくです。実行がラインcurrentmoney = float(f.readline())でループを続行する場合:fあなたがから読み取ることができない、閉じたファイルハンドルになります。

他のヒント

うまく物事のカップルをtheresの...

あなたは、whileループの外open(money.txt)ができますが、最初の反復の後にそれを閉じ... (技術的にはあなたが再び開き&再び閉じ、閉じ)

ループは二度目のラウンドになると、

入れ、fが閉鎖され、f.readLine()最も可能性が高い。

失敗します

あなたはそうしないと、IFブロックの後に、それを再開しようとすると、IF条件が満たされた場合にのみ、あなたのファイルを閉じます。その結果に応じて、あなたはf.close呼び出しを削除、またはELSEブランチを追加して、第二f.open呼び出しを削除するかでしょう達成したいです。とにかく私はあなたのIFブロックのSTRが(今)あなたはどこでもその呼び出しの結果を保存していないとして廃止されていることを警告させます。

money.txtが存在しない場合、あなたはあなたの最初の行にIOエラーを取得します。

私は質問を背負うことはできますか?以下は、いくつかの時間のために私が困惑しています。私は常にこれらの「オープン()」ステートメントからの例外IOErrorを取得するので、私は、エラーのチェックを停止しました。 (それを行うには好きではない!)私のコードが悪いのか? 「例外IOError場合:」コメントに示した試験ではとの文の後に、もともと右だった「オープン()」

if __name__ == '__main__':
#get name of input file and open() infobj
    infname = sys.argv[1]
    print 'infname is:  %s' % (sys.argv[1])
    infobj = open( infname, 'rU' )
    print 'infobj is:  %s' % infobj
# 'if IOError:' always evals to True!?!
#   if IOError:
#       print 'IOError opening file tmp with mode rU.'
#       sys.exit( 1)

#get name of output file and open() outfobj
    outfname = sys.argv[2]
    print 'outfname is: %s' % (sys.argv[2])
    outfobj = open( outfname, 'w' )
    print 'outfobj is: %s' % outfobj
#   if IOError:
#       print 'IOError opening file otmp with mode w.'
#       sys.exit( 2)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top