python: ValueError: I/O operation on closed file

python: ValueError: I/O operation on closed file

我的代码:

with open('pass.txt') as f:
        credentials = dict([x.strip().split(':') for x in f.readlines()]) # Created a dictionary with username:password items

        name_input = input('Please Enter username: ')

        if name_input in credentials:  # Check if username is in the credentials dictionary

            name_input = input('Please Enter new username: ')



        f.write(name_input)
        f.write(":")
        pass_input = input('Please Enter password: ')
        f.write(pass_input)
        f.write("\n")
        f.close()

        print('Registered')

我收到此错误:

Traceback (most recent call last):
  File "silwon.py", line 146, in <module>
    f.write(name_input)
ValueError: I/O operation on closed file.

还有用户输入同一个用户名3次后如何使用sys.exit?

Python中的每个文件操作都是在以特定模式打开的文件上完成的。模式必须指定为打开函数的参数,它决定了可以对文件进行的操作,以及文件指针的初始位置。

在您的代码中,您打开文件时除了打开函数的名称外没有任何参数。当未指定模式时,文件以默认模式打开 - 只读,或 'r'。这会将文件指针放在文件的开头,使您能够按顺序扫描文件的内容,并将它们读入程序中的变量。为了能够将数据写入文件,您必须指定一种打开文件的模式,以便将数据写入文件。可以从两个选项中选择合适的模式,'w''w+''a''a+'

'w' 打开文件并授予用户只能将数据写入文件的权限,不能从中读取数据。它还将指针放在文件的开头并覆盖任何现有数据。 'w+' 几乎相同,唯一的区别是您也可以从文件中读取。

'a' 以写入方式打开文件,并将文件指针置于文件末尾,因此您不会覆盖文件内容。 'a+' 扩展了 'a' 的功能,也允许从文件中读取。

根据自己的需要使用合适的文件打开方式,将打开命令修改为open('pass.txt', <mode>).

即可执行

您需要定义要对文件执行的操作。在您的情况下,您想要写入文件,因此您需要从以下模式 select: 'w'、'w+'、'a' 或 'a+'