我在这个网站上搜索过类似的问题,但是没有找到任何有效的解决方案,因此,这个问题。
我正在编写一个Python 3.4程序,其中我有一个函数export,它基本上将数据附加到文本文件中。
该函数检查以确保存在适当的文件,如果没有,则创建一个,然后获取文件的内容,添加附录并覆盖文件。
Python在for line in file:
处抛出错误。此外,再次运行此程序时,一旦创建了文本文件,就不会发生此错误。
这是功能:
def export(addendum, user):
filename = user + '.txt'
try:
file = open(filename, 'r')
except OSError:
file = open(filename, 'w')
export(addendum, user)
file_contents = ''
print('What day is it? (1-5)')
day = input()
day = int(day)
if day >= 1 and day <= 5:
for line in file:
file_contents += line
file = open(filename, 'w')
new_file = file_contents + '\n' + addendum
file.write(new_file)
file.close()
else:
print('Invalid weekday number...')
sys.exit()
答案 0 :(得分:4)
当文件尚未存在时会发生这种情况,因为在写入模式下打开文件时会发生这种情况。写入模式不可读。
我对这里发生的事情的理解是,当第一次调用时文件不存在时,你的except块会打开一个文件并将其放在那里;然后由于某种原因递归,它会在此调用中遇到第一个块,并在堆栈的该级别完成;当它返回到下一级别时,第一次调用继续,但文件引用仍处于写入模式,无论堆栈的其他级别如何。当它到达for line in file
它会爆炸。
我建议你大大简化你在这里发生的事情。
def export(addendum, user):
filename = user + '.txt'
try:
with open(filename, 'r') as file:
contents = file.read()
except OSError:
contents = ""
day = input("What day is it (1-5)?")
day = int(day)
if not (1 <= day <= 5):
print("Invalid weekday number...")
sys.exit()
contents += '\n' + addendum
with open(filename, 'w') as file:
file.write(contents)