2010-07-12 6 views
10

Ich möchte die Best Practice über das Auslösen einer Ausnahme ohne Argumente wissen. In der offiziellen Python-Dokumentation, können Sie dies sehen:Python, eine Ausnahme ohne Argumente ragend

try: 
    raise KeyboardInterrupt 

(. http://docs.python.org/tutorial/errors.html Kap 8.6)

und in einigen Code differents, wie Django oder Google-Code, können Sie diese sehen:

def AuthenticateAndRun(self, username, password, args): 
    raise NotImplementedError() 

(http://code.google.com/p/neatx/source/browse/trunk/neatx/lib/auth.py)

Die Ausnahme ist Instanciate bevor angehoben wird, während es kein Argument. Was ist der Zweck, eine Ausnahme ohne Argumente instanziieren? Wann sollte ich den ersten Fall oder den zweiten Fall verwenden?

Vielen Dank im Voraus Fabien

Antwort

3

eine Ausnahmeklasse statt einer Ausnahme Instanz Anhebung wird Syntax veraltet und nicht in neuem Code verwendet werden soll.

raise Exception, "This is not how to raise an exception..." 
+0

Für Interessierte finden Sie unter http://www.python.org/dev/peps/pep-0352/#transition-plan weitere Informationen zur ausnahmebedingten Abwertung. –

+8

Ich kann nicht herausfinden, was Sie empfehlen. Ihr Codebeispiel scheint das zu sein, was ** nicht ** zu tun ist. Vielleicht solltest du zeigen, was * getan * werden sollte. –

+0

Immer noch nicht sicher, was getan werden sollte. – FrenchKheldar

0

In Sprachen wie C++ können Sie jedes Objekt auslösen, nicht nur Ausnahmen. Python ist eingeschränkter. Wenn Sie versuchen:

raise 1 

Sie erhalten:

Traceback (most recent call last): 
... 
TypeError: exceptions must be old-style classes or derived from BaseException, not int 

In Python-Programmiermodell können Sie in der Regel eine Klasse für sich, statt einer Instanz verwenden (das ist praktisch für die schnelle Erstellung von einzigartigen Fällen nur definieren eine Klasse). Daher ist es kein Wunder, dass Sie eine Ausnahmeklasse anstelle einer Ausnahmeinstanz auslösen können.

Aber wie Ignacio sagte, das ist veraltet.

Auch einige Nebennote, die nicht die direkte Frage:

Sie könnten auch allein für sich in einigen Code sehen erhöhen. Ohne irgendeine Objektklasse oder irgendetwas. Es wird in Ausnahmebehandlern verwendet, um die aktuelle Ausnahme erneut zu erhöhen, und behält die anfängliche Rückverfolgung bei.

3

Sie können die gewünschte Form verwenden. Es gibt keinen wirklichen Unterschied und beide sind in Python 2 und 3 legal. Python style guide gibt nicht an, welches empfohlen wird.


Ein wenig mehr Informationen über die "Klasse Form" Unterstützung:

try: 
    raise KeyboardInterrupt 

Diese Form ist völlig legal in beide Python 2 und 3 Auszug aus pep-3109:

raise AUSNAHME wird verwendet, um eine neue Ausnahme auszulösen. Dieses Formular enthält zwei Untervarianten : EXCEPTION kann eine Ausnahmeklasse oder eine Instanz einer Ausnahmeklasse sein; Gültige Ausnahmeklassen sind BaseException und ihre Unterklassen [5].Wenn EXCEPTION eine Unterklasse ist, wird sie ohne Argumente aufgerufen, um eine Ausnahmeinstanz zu erhalten.

Es wird auch in Python documentation beschrieben:

... Wenn es eine Klasse ist, wird die Ausnahme-Instanz erhalten werden, wenn benötigt durch die Klasse ohne Argumente instanziieren.

Verwandte Themen