2012-07-16 22 views

Antwort

49

Das einzige Argument hilft, die Ausnahme zu erhöhen zeigt angehoben werden. Dies muss entweder eine Ausnahmeinstanz oder eine Ausnahmeklasse sein (eine Klasse, die von Exception abgeleitet ist).

Try this:

test = 'abc' 
if True: 
    raise Exception(test + 'def') 
14

Es sollte eine Ausnahme sein.

Sie wollen, wie etwas zu tun ist:

raise RuntimeError(test + 'def') 

In Python 2.5 und unten, würde Ihr Code arbeiten, da dann wurde es erlaubt Strings als Ausnahmen zu erhöhen. Das war eine sehr schlechte Entscheidung und wurde in 2.6 gestrichen.

+2

Können Sie sich erklären, warum es so schlecht ist eine Zeichenfolge als eine Ausnahme zu erhöhen? – BioGeek

+3

@BioGeek Probleme mit String-Ausnahmen funktionieren nur manchmal, wenn ein Literal sowohl in 'raise' als auch in' except' verwendet wird. Es wird kein OO-Mechanismus zum Anhängen von zusätzlichen Informationen an die Exception und zum Abfangen von Kategorien mehrerer Exception-Typen bereitgestellt . Ausnahmen wurden der Sprache vor den Klassen hinzugefügt, und sobald Ausnahmenklassen hinzugefügt wurden, wurden Zeichenfolgenausnahmen nur aus Gründen der Abwärtskompatibilität beibehalten. Ihr Entfernen, wie jedes Entfernen von (Fehl-) Merkmalen, vereinfachte die Sprache. –

+0

Vielen Dank für die Erwähnung der Version, in der diese Funktion zuletzt unterstützt wurde. Das hat mir geholfen. – SpaceTrucker

32

Sie können nicht raise ein str. Nur Exception s kann raise d sein.

Also, Sie sind besser dran, eine Ausnahme mit dieser Zeichenfolge zu konstruieren und diese zu erhöhen. Zum Beispiel könnten Sie tun:

test = 'abc' 
if True: 
    raise Exception(test + 'def') 

ODER

test = 'abc' 
if True: 
    raise ValueError(test + 'def') 

Hoffnung, die

+0

Auch können Sie nicht ohne ein Argument erheben. –

Verwandte Themen