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 错误可能是因为当您运行循环时,您所做的最后一件事是f.close(),这会关闭文件。当继续执行循环时,currentmoney = float(f.readline()):f将是一个关闭的文件句柄,您无法从中读取。

于 2009-05-16T16:02:47.023 回答
2

好吧,有几件事...

open(money.txt)在while循环之外,但你在第一次迭代后关闭它......(从技术上讲,你关闭,重新打开并再次关闭)

当循环第二次出现时,f将关闭并且 f.readLine() 很可能会失败

于 2009-05-16T15:58:57.440 回答
0

仅当满足 IF 条件时才关闭文件,否则在 IF 块后尝试重新打开它。根据您想要实现的结果,您将需要删除 f.close 调用,或者添加一个 ELSE 分支并删除第二个 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 回答