2016-08-14 6 views
0

Zum Beispiel habe ich eine Funktion wie:Wie kann ich ein Dateihandle schließen, während die Funktion mit Ausnahme in Python beendet wird?

def example(): 
    fp = open('example.txt','w+') 
    fp.write(str(1/0)) 
    fp.close() 

Dann wird es eine Ausnahme aus, da 1/0 nicht definiert ist. Ich kann jedoch weder example.txt entfernen noch example.txt ändern. Aber ich habe einige wichtige Daten in Python, damit ich Python nicht einfach töten und wieder ausführen kann.

Wie kann ich die Datei beenden, wenn die Funktion mit einer Ausnahme beendet wird?

Was sollen wir tun, wenn wir es nicht versuchen: .. außer: ..?

+1

http://effbot.org/zone/python-with-statement.htm – wwii

Antwort

2

Sie können das in einem try/except umwandeln, um den Fehler zu behandeln und den Dateireader zu schließen, bevor das Programm beendet wird.

def example(): 
    fp = open('example.txt', 'w+') 
    try: 
     fp.write(str(1/0)) 
    except ZeroDivisionError: 
     fp.close() 
    fp.close() 

Edit: Die Antwort von @IanAuld ist besser als meine. Es wäre das Beste, das zu akzeptieren.

+0

Eigentlich meine Frage ist, wenn ich nicht einen Versuch schreibe ... außer ... Struktur, kann ich die Datei schließen? –

3
with open('example.txt','w+') as fp: 
    try: 
     fp.write(...) 
    except ZeroDivisionError as e: 
     print('there was an error: {}'.format(e)) 

Verwenden des with Kontext-Manager alle von ihm geöffneten Dateien automatisch, sobald sie den Gültigkeitsbereich verlassen werden geschlossen.

+0

Bedeutet das, dass wir die Datei nicht mehr schließen können, wenn wir keinen 'try ... except ...' gesetzt haben? –

+0

Nein, Sie können immer noch auf die gleiche Weise öffnen und schließen wie zuvor, bevor der Context Manager nur sicherstellt, dass die Datei so lange geöffnet bleibt, wie Sie sie brauchen, und sie schließt, sobald Sie damit fertig sind. [Lesen Sie hier] (https://www.python.org/dev/peps/pep-0343/) – IanAuld

Verwandte Themen