2016-07-21 4 views
-2

Ich bin auf der Suche nach einer guten Konvention für die Rückgabe von fehlgeschlagen von einer Funktion, wenn die Funktion fehlschlägt. Normalerweise möchte ich None oder False zurückgeben, aber in meinem Fall besteht der Zweck der Funktion darin, ein IO zu lesen, das bool (True/False), int oder float sein kann.Wie man einen Fehler in Python zurückgibt

In diesem Fall kann ich kein False zurückgeben. Ich habe versucht, None zu verwenden, aber ich weiß nicht, ob dies der beste Fall ist, wenn ich die Rückgabe nicht überprüfe, da ich die Funktion None output als False output anrufe.

Ich dachte, eine Definitionsdateien, die Zeichenfolge-Token hat, aber das scheint in effizienter, um die Zeichenfolge analysieren müssen.

Sind eingebaute Objekte verfügbar? Was ist die Konvention?

+3

Ziemlich sicher, dass die Konvention einen Fehler verursacht. –

+6

Haben Sie darüber nachgedacht, im Fehlerfall eine Ausnahme auszulösen? – cdarke

+1

Verwenden Sie Ausnahmen. Dafür sind sie da. Ich kenne eine Menge Programmierer, die sich mit ihnen nicht auskennen, weil sie nicht wollen, dass überhaupt ein "Fehler" passiert, und dass es einfach keine gute Lösung ist, sie zu fangen, aber es ist kein Fehler, sondern eine Ausnahme - Und dafür sind sie da. – Fhaab

Antwort

0

Sie sollten eine Ausnahme auslösen, wenn die Funktion fehlschlägt. Es ist nicht empfehlenswert, nach dem EAFP Prinzip von Python zu überprüfen, ob Ihr Rückgabewert ungültig ist.

Leichter um Verzeihung bitten als Erlaubnis. Dieser allgemeine Python-Codierungsstil geht von der Existenz gültiger Schlüssel oder Attribute aus und fängt Ausnahmen ab, wenn sich die Annahme als falsch herausstellt. Dieser saubere und schnelle Stil zeichnet sich durch das Vorhandensein vieler try und except Statements aus. Die Technik kontrastiert mit dem LBYL-Stil, der vielen anderen Sprachen gemein ist, wie zum Beispiel C.

+0

Wenn ich eine Ausnahme in der Funktion auslösen würde, müsste ich noch etwas von der Funktion zurückgeben und sie von der Seite des Aufrufers aus behandeln, damit mein Skript weiterläuft? Oder sollte ich eine andere Versuch- und Ausnahmeanweisung von der anrufenden Seite haben? – Sam

+1

Die Ausnahmen Idee ist kurz, zwei Programme zu trennen fließt: normal (wenn alles in Ordnung ist) und außergewöhnlich (wenn etwas kaputt ist). Wenn Ausnahmen in Programmiersprachen auftreten, wurde der alte "check return value" -Programmierstil für Sprachen, die Ausnahmenmechanismen unterstützen, veraltet (** mit seltenen Ausnahmen **). Wenn Ihre Funktion normal beendet wird, gibt sie den erwarteten Ergebniswert zurück. Wenn nicht - es löst eine Ausnahme aus, und das Anrufermodul sollte es abfangen und verarbeiten - wenn es weiß, was mit dieser Ausnahme zu tun ist, wird der Rückgabewert ** nicht an eine Anruferfunktion übertragen **. – lospejos

+0

@lospejos Was würden Sie tun, wenn das Anrufermodul es "fängt und verarbeitet"? Würden Sie eine try und except-Anweisung verwenden, um damit umzugehen? – Sam