Python generiert einen E/A-Fehler, während das Öffnen/Schließen/Readline/Schreiben für dieselbe Datei verschachtelt wird

StackOverflow https://stackoverflow.com/questions/872680

  •  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!

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top