Python: kann keinen IndexError fangen

9

Haftungsausschluss: Das sieht wie ein Duplikat aus, aber eine Antwort auf dieses spezielle Problem zu finden, war mehr als trivial - ich hoffe, dass andere diese Frage / Antwort leichter finden werden!

Wenn ich den folgenden Code ausführe, kann der zweite IndexError nicht abgefangen werden, sondern stattdessen:

%Vor%

führt zu

%Vor%     
drevicko 15.06.2014, 13:58
quelle

1 Antwort

15

Das Problem war eine schlechte Verwendung von except ... Syntax. Die Linie:

%Vor%

sollte

sein %Vor%

Erklärung : Wenn Sie die ausgelöste Ausnahme prüfen möchten, lautet die Syntax except <exception-class>,e , wobei der Variablen e eine Instanz von <exception-class> zugewiesen ist. Folgendes passiert im fehlerhaften Code:

  1. open("afile",'x') gibt ValueError aus, da 'x' keine gültige Dateimoduszeichenfolge ist.
  2. except ValueError,IndexError weist die geworfene Instanz ValueError einer neuen Variablen namens IndexError .
  3. zu
  4. Diese neue Variable überschreibt die integrierte Klasse IndexError .
  5. l[4] löst eine tatsächliche IndexError Ausnahme aus.
  6. Die except -Klausel wird für diesen Ausnahmetyp geprüft, aber nur eine Instanz von ValueError (die zufällig den Namen IndexError hat) wird gefunden, so dass die Ausnahme nicht abgefangen wird.

Wenn Sie eine interaktive Python-Sitzung ausführen, können Sie mit del IndexError das eingebaute Objekt aufdecken und% code_% wieder abfangen.

    
drevicko 15.06.2014 13:58
quelle