2017-02-14 1 views
0

В нашем классе нам была поставлена ​​задача в основном создать программу, которая повторяет выборы в США в прошлом году. Одна из дополнительных проблем заключается в том, что когда вы вводите идентификационный номер, который уже находится в файле, он должен появиться с ошибкой и просто остановиться. Однако, когда я пытаюсь выполнить этот код, он приходит сКак вы сообщаете дубликаты в txt. файл?

ValueError: I/O operation on closed file.

Это код, который я сделал до сих пор ...

ID = input("Please input ID code ") 
if(len(ID)) == 6: 
    print("ID length: Valid") 
    N += 1 
else: 
    print("ID Code: Error") 
    sys.exit() 
with open('ID.txt', 'a') as idc: 
    idc.write(ID + ' ') 
already_seen = set() 
for line in idc: 
    if line not in already_seen: 
     print("Valid") 
    else: 
     print("Error") 
     sys.exit() 

Благодаря

ответ

0

Вы должны знать разница между

with open('ID.txt', 'a') as idc: 
    do sth 

и

idc = open('ID.txt', 'a') 

В первом случае, после завершения do sth, будет вызываться __exit__() idc, чтобы закрыть файл.

Советуем использовать второе выражение, которое я указываю выше. Если вы новичок в Python, этот blog поможет вам понять причины детализации.