2014-11-04 10 views
12

Ich verwende derzeit Python 2 für ein Projekt, das eine integrierte Python 3-Ausnahme benötigt: FileNotFoundError. Wie mache ich es?Wie importiere ich FileNotFoundError von Python 3?

+0

Sie können das nicht tun. Warum nicht einfach die Ausnahme selbst definieren? –

+0

'versuchen' dann' außer: pass' – Hackaholic

+7

@Hackaholic Err ... nein. Warum sollte er das tun wollen? –

Antwort

20

Sie können natürlich alle Ausnahmen definieren, die Sie möchten.

Aber sie werden dir nichts nützen. Der ganze Punkt von FileNotFoundError ist, dass jede Python-Operation, die zu einem Datei-nicht-gefunden-Fehler führt, diese Ausnahme auslöst. Wenn Sie nur Ihre eigene Ausnahme definieren, wird dies nicht wahr. Alles, was Sie bekommen, ist ein OSError (oder IOError, abhängig von 2.x-Version) mit einem entsprechenden errno Wert. Wenn Sie versuchen, eine benutzerdefinierte FileNotFoundError zu behandeln, wird Ihr Handler nie aufgerufen.

Also, was Sie wirklich wollen, ist (zum Beispiel):

try: 
    f = open(path) 
except OSError as e: 
    if e.errno == errno.ENOENT: 
     # do your FileNotFoundError code here 
    else: 
     raise 
+2

Scheint wie die [korrekte Ausnahme ist IOError] (https://docs.python.org/2/library/exceptions.html#exceptions.IOError). – Mansour

+2

@Mansour: für 2.6-2.7 sind die beiden ziemlich sauber geteilt. Für ältere Versionen (vor allem, wenn Sie nicht CPython verwenden), ist es eine andere Geschichte (und einige Dinge, wie Socket-Verbindungsfehler, waren _neither_). Daher "abhängig von der Version 2.x". Um sicher zu sein, können Sie immer beide oder (wenn Sie nicht weit zurück zu 1.5 gehen müssen) ihre gemeinsame Unterklasse EnvironmentError abfangen. – abarnert

+0

Ich habe das Beispiel gelesen und den Text komplett ignoriert! – Mansour

2

Sie können einfach erstellen Sie die FileNotFoundError Ausnahme selbst:

class FileNotFoundError(OSError): 
    pass 

Diese neue Ausnahmeklasse erbt von OSError genau wie der in Python 3.x

Hier ist eine Referenz auf User-defined Exceptions in Python.

2

Sie IOError stattdessen verwenden:

ausgelöst, wenn eine I/O-Operation (wie eine print-Anweisung, die integrierte open() - Funktion oder eine Methode eines Dateiobjekts) schlägt aus E/A-Gründen fehl, zB "Datei nicht gefunden" oder "Festplatte voll".

Diese Klasse ist von EnvironmentError abgeleitet. Weitere Informationen zu Ausnahmeninstanzattributen finden Sie in der obigen Diskussion.

Geändert in Version 2.6: Changed socket.error, um dies als eine Basisklasse zu verwenden.

+0

Können Sie mehr Kontext bereitstellen? In der Regel reichen die Antworten eines Satzes für SO nicht aus. – sadmicrowave

+0

Ein Link oder Zitat zu der Dokumentation wäre großartig. ^^ Das ist viel mehr inklusive +1 – sadmicrowave

+1

Ich habe das Zitat hinzugefügt. und markierte den Teil "Datei nicht gefunden" :-) –

Verwandte Themen