Python generiert einen E/A-Fehler, während das Öffnen/Schließen/Readline/Schreiben für dieselbe Datei verschachtelt wird
-
22-08-2019 - |
Frage
Ich lerne Python – das gibt mir einen IO-Fehler –
f = open('money.txt')
while True:
currentmoney = float(f.readline())
print(currentmoney, end='')
if currentmoney >= 0:
howmuch = (float(input('How much did you put in or take out?:')))
now = currentmoney + howmuch
print(now)
str(now)
f.close()
f = open('money.txt', 'w')
f.write(str(now))
f.close()
Danke!
Lösung
Die while True
Schleife wird für immer, wenn Sie es mit break
brechen.
Die I / O-Fehler ist wahrscheinlich, weil, wenn Sie durch die Schleife ausgeführt haben, sobald das letzte, was Sie tun f.close()
ist, die die Datei geschlossen wird. Wenn die Ausführung mit der Schleife in der Leitung currentmoney = float(f.readline())
weiter. f
wird eine geschlossene Dateikennung sein, dass Sie nicht aus lesen können
Andere Tipps
Theres auch ein paar Dinge ...
Sie außerhalb der while-Schleife open(money.txt)
, aber sie schließen es nach der ersten Iteration ...
(Technisch schließen Sie, wieder öffnen und wieder schließen)
Setzen Sie, wenn die Schleife um die zweite Zeit kommt, f
geschlossen und f.readline () wird höchstwahrscheinlich fehlschlagen
Sie schließen Ihre Datei nur, wenn die IF-Bedingung erfüllt ist. Andernfalls versuchen Sie, sie nach dem IF-Block erneut zu öffnen.Abhängig vom Ergebnis, das Sie erreichen möchten, möchten Sie entweder den f.close-Aufruf entfernen oder einen ELSE-Zweig hinzufügen und den zweiten f.open-Aufruf entfernen.Ich möchte Sie trotzdem warnen, dass str(now) in Ihrem IF-Block einfach veraltet ist, da Sie das Ergebnis dieses Aufrufs nirgendwo speichern.
Sie erhalten eine IO-Fehler auf Ihrem ersten Zeile, wenn money.txt existiert nicht.
Kann ich huckepack eine Frage? Im Folgenden hat mich einige Zeit verwirrt. Ich bekomme immer eine IOError aus diesen ‚open ()‘ Aussagen, also habe ich den Fehler gestoppt zu überprüfen. (Nicht wie das zu tun!) Was ist mit meinem Code falsch? Die 'wenn IOError:' test in den Kommentaren angezeigt war ursprünglich direkt nach der Aussage mit "open ()
.if __name__ == '__main__':
#get name of input file and open() infobj
infname = sys.argv[1]
print 'infname is: %s' % (sys.argv[1])
infobj = open( infname, 'rU' )
print 'infobj is: %s' % infobj
# 'if IOError:' always evals to True!?!
# if IOError:
# print 'IOError opening file tmp with mode rU.'
# sys.exit( 1)
#get name of output file and open() outfobj
outfname = sys.argv[2]
print 'outfname is: %s' % (sys.argv[2])
outfobj = open( outfname, 'w' )
print 'outfobj is: %s' % outfobj
# if IOError:
# print 'IOError opening file otmp with mode w.'
# sys.exit( 2)