Python 打印错误消息 io.UnsupportedOperation : not readable

标签 python macos python-3.x file io

我已经在这个网站上搜索了类似的问题,但没有找到任何有效的解决方案,因此,这个问题。 我正在编写一个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()

最佳答案

当文件尚不存在时就会发生这种情况,因为那时文件是在写入模式下打开的。写入模式不可读。

我对这里发生的情况的理解是,当第一次调用时文件不存在时,您的 except block 会打开一个文件并将一个文件放在那里;然后由于某种原因进行递归,它会命中此调用的第一个 block ,并在堆栈的该级别完成;当它返回到下一个级别时,您的第一次调用将继续,但文件引用仍处于写入模式,无论堆栈的其他级别做了什么。当它到达文件中的行时,它就会爆炸。

我建议你大大简化你在这里所做的事情。

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)

关于Python 打印错误消息 io.UnsupportedOperation : not readable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29528910/

相关文章:

python - 如何用 Tornado 测试 aioredis

iPhone开发

macos - 从 OSX 终端打开 Sublime 的命令

linux - Rcpp:输出中的平台差异

python-3.x - 在 Spyder 中运行 PyQt5 应用程序时,它总是以 -1 退出

Python:如何在 python 使用日志记录模块中创建和使用自定义记录器?

python - 替换 numpy ndarray 中的字符(Python)

python - 解决嵌套属性中的属性错误

python - 如何使用joblib并行写入文件?可加入队列问题

python - 按键对项目进行分组?