1

私は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()

ありがとう!

4

5 に答える 5

3

で中断しない限り、while Trueは永久にループしますbreak

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

于 2009-05-16T16:02:47.023 に答える
2

さて、いくつかのことがあります...

あなたopen(money.txt)は while ループの外側にいますが、最初の繰り返しの後に閉じます... (技術的には、閉じて、もう一度開いて、もう一度閉じます)

ループが 2 回目に回ったときに putfが閉じられ、f.readLine() が失敗する可能性が高くなります。

于 2009-05-16T15:58:57.440 に答える
0

IF 条件が満たされた場合にのみファイルを閉じます。それ以外の場合は、IF ブロックの後でファイルを再度開きます。達成したい結果に応じて、f.close 呼び出しを削除するか、ELSE ブランチを追加して 2 番目の f.open 呼び出しを削除する必要があります。とにかく、その呼び出しの結果をどこにも保存していないため、IF ブロックの str(now) は非推奨であることを警告させてください。

于 2009-05-16T15:58:19.827 に答える
0

money.txt が存在しない場合、最初の行で IO エラーが発生します。

于 2009-05-16T16:12:39.963 に答える
0

質問をピギーバックできますか? 以下は、しばらくの間私を困惑させました。これらの「open()」ステートメントから常に IOError が発生するため、エラーのチェックを停止しました。(そんなことはしたくない!) 私のコードの何が問題なのですか? コメントに示されている「if IOError:」テストは、もともと「open()」を含むステートメントの直後にありました。

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)
于 2009-05-16T16:40:00.553 に答える