Hier is p
een woordenboek, w
en c
zijn beide strings.
Als ik naar het bestand probeer te schrijven, meldt het de fout:
ValueError: I/O operation on closed file.
Antwoord 1, autoriteit 100%
Correct inspringen; uw for
-instructie moet binnen de with
blok:
import csv
with open('v.csv', 'w') as csvfile:
cwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
for w, c in p.items():
cwriter.writerow(w + c)
Buiten het blok with
wordt het bestand gesloten.
>>> with open('/tmp/1', 'w') as f:
... print(f.closed)
...
False
>>> print(f.closed)
True
Antwoord 2, autoriteit 4%
Dezelfde foutkan verhogen door mixen: tabs + spaties.
with open('/foo', 'w') as f:
(spaces OR tab) print f <-- success
(spaces AND tab) print f <-- fail
Antwoord 3
Ik kreeg deze uitzondering bij het debuggen in PyCharm, aangezien er geen onderbrekingspunt werd bereikt. Om dit te voorkomen, heb ik een onderbrekingspunt toegevoegd net na het with
-blok, en toen gebeurde het niet meer.
Antwoord 4
file = open("filename.txt", newline='')
for row in self.data:
print(row)
Sla gegevens op in een variabele (file
), dus je hebt een with
nodig.
Antwoord 5
Ik had dit probleem toen ik een ongedefinieerde variabele binnen de with open(...) as f:
gebruikte.
Ik heb de ongedefinieerde variabele verwijderd (of ik heb deze buiten gedefinieerd) en het probleem is verdwenen.