我正在学习教科书中的教程,“从python第二版开始”,我在IDLE 3.2中进行了这个练习。我似乎无法弄清楚这个问题,它允许我输入销售数量然后只有1个销售额的回声“数据写入sales.txt”。然后显示第2天的提示,但输入的任何金额都会导致追溯:
第118行,主要是 sales_file.write(str(sales)+'\ n') ValueError:关闭文件的I / O操作。
代码:
def main():
num_days = int(input('For how many days do ' + \
'you have sales? '))
sales_file = open('sales.txt', 'w')
for count in range(1, num_days + 1):
sales = float(input('Enter the sales for day #' + \
str(count) + ': '))
sales_file.write(str(sales) + '\n')
sales_file.close()
print('Data written to sales.txt.')
main()
答案 0 :(得分:7)
您正在关闭for循环中的文件。当您写入文件时,下次循环时,您正在尝试写入已关闭的文件,因此显示的错误消息为I/O operation on closed file.
。
移动线
sales_file.close()
到for循环底部的print语句之后,但在for
的级别缩进。这将在循环之后仅关闭文件一次(而不是重复),即在程序结束时完成它。
像这样:
for count in range(1, num_days + 1):
sales = float(input('Enter the sales for day #' + str(count) + ': '))
sales_file.write(str(sales) + '\n')
print('Data written to sales.txt.')
sales_file.close() # close file once when done
更好的方法是使用with
语句,因为它会在您完成后自动为您关闭文件。所以你可以说
with open('sales.txt', 'w') as sales_file:
for count in range(1, num_days + 1)
# rest of the code
# but *no* close statement needed.
答案 1 :(得分:1)
如果你使用with open('sales_file','w')
,你可以用更干净的方式做到这一点
这样,一旦你离开with
区块,它将自动关闭。{1}}区块
文件。所以你要编辑你的函数来阅读:
def main():
num_days = int(input('For how many days do ' + \
'you have sales? '))
with open('sales.txt', 'w') as sales_file:
for count in range(1, num_days + 1):
sales = float(input('Enter the sales for day #' + \
str(count) + ': '))
sales_file.write(str(sales) + '\n')
print('Data written to sales.txt.')
# once you leave the block (here) it automatically closes sales_file
main()
答案 2 :(得分:0)
您在1循环中关闭文件,然后在下一次迭代中写入该文件。靠近循环外面
def main():
num_days = int(input('For how many days do ' + \
'you have sales? '))
sales_file = open('sales.txt', 'w')
for count in range(1, num_days + 1):
sales = float(input('Enter the sales for day #' + \
str(count) + ': '))
sales_file.write(str(sales) + '\n')
print('Data written to sales.txt.')
sales_file.close()
main()
更好的是,您可以使用with
def main():
num_days = int(input('For how many days do you have sales? '))
with open('sales.txt', 'w') as sales_file:
for count in range(1, num_days + 1):
sales = input('Enter the sales for day #%s: ' % count)
sales_file.write('%s\n' % sales)
print('Data written to sales.txt.')
main()