`return None` in python nicht empfehlenswert. So umgehen?
Ich habe eine Funktion, die eine Verbindung zu einem url durch httplib
mit lxml
. Es wird überprüft, indem xpath
nach einem bestimmten Muster, und wenn der check positiv ist, gibt es einen string zurück. Aber wenn die Prüfung negativ war, es gibt nichts zurück.
Nun die situation, dass meine Funktion gibt None
. Ich rufe die Funktion auf, prüfen Sie, ob Ihr Rückgabewert ist not None
und weiter im code.
Beispiel:
def foobar(arg):
# connect to page by httplib
# check for arg in a certain pattern by lxml
if check:
return result
else:
return None
result = foobar(arg)
if result:
# do stuff
else:
# do other stuff
Kürzlich Las ich, dass dies ein no go. Wie vermeide ich solche Situationen?
Entfernen Sie einfach else: return None Teil?
Sie sollten wahrscheinlich verwenden Sie
Was ist der Unterschied zwischen
Mit
Sie sollten wahrscheinlich verwenden Sie
if result is None
obwohl.Was ist der Unterschied zwischen
if result
und if result is None
?Mit
if result is not None
statt if result
(Hinweis: die not
) bedeutet, dass andere boolean false Werte wie 0
oder ""
werden nicht genauso behandelt wie None
, das ist wahrscheinlich das, was Sie wollen. Und wenn Sie möchten, werden ausdrücklich in der Rückkehr None
(und es ist nichts falsch mit, dass) dann eine alternative für Ihr foobar wäre return result if check else None
InformationsquelleAutor Aufwind | 2011-05-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nichts falsch mit der Rückkehr
None
.In den meisten Fällen müssen Sie nicht explizit zurück
None
. Python wird es für Sie tun. Dies ist eine veränderte version von Ihrfoobar
verhält sich identisch, ohne ausdrücklich die RückkehrNone
:Immer noch, auch wenn Python implizit zurück
None
es ist ein Wert an als die explizite; Ihr code wird leichter zu Lesen und zu verstehen. Dies ist ein ständiger trade-off, für die es keine Allgemeine Antwort.InformationsquelleAutor Håvard S
Es hängt davon ab, warum es ein "no go"; ich habe Sie nicht gehört. Wenn es nur schlechte form, das weglassen der "return None" (else-Anweisung) zusammen, und es erfolgt die Rückkehr standardmäßig Keine. Wenn es schlecht angesehen, zurück Keine, Rückgabe 0 oder " (leere Zeichenkette) oder False statt, abhängig von der Art der Erwartungen der Anrufer.
return False
yep, danke. tatsächlich sah Sie Ihren Kommentar nach dem Bearbeiten, hinzufügen, dass
Dass ich auf diese Lektüre des Buches Clean Code von Robert C. Martin. Er behauptet, die Rücksendung oder die Weitergabe
Null
ist eine Quelle für Fehler undNullPointerExceptions
. Und wenn Sie vermissen einen check fürNull
dem Programm gehen würde Spinnen. Ich kann nicht zitieren die passage hier, weil es zu viel Java-code-Beispiele, die musste ich einfügen, mit es um den Kontext.Das gilt für Sprachen, in denen Sie bekommen kann null-pointer-exceptions. In Python
None
ist eigentlich ein Objekt, nicht ein null-Wert.ist es nicht mehr oder weniger das gleiche (null vs. Keine)? Die "null"-Objekt bleibt inaktiv, bis Sie versuchen, es zu verwenden als die original-typisierte Objekt (null_object.foo()) und dann wirft eine NullPointerException. Und Sie die müssen die "ist das null" prüft überall, um sicherzustellen, dass es nicht verwendet wird. Wenn eine Methode zurückgeben kann Keiner, oder Geben Sie (in der gleichen Art und Weise) überprüfen, ob es Keine otherways (none_object.foo()) aufgerufen wird und eine Excepion geworfen werden.
InformationsquelleAutor jcomeau_ictx
Es gibt viele Arten, damit umzugehen, einschließlich der Verwendung von Ausnahmen oder einfach wieder was Sie bekommen, einschließlich einem leeren string. Dies ist auch in Ordnung:
InformationsquelleAutor Henry
Ich denke, dass die Rückkehr
None
ist ein "no go" aus usability-Sicht eher als Stil. Wie oben kurz erwähnt in diese beantworten, betrachten die Erhöhung eine Ausnahme statt. Zum Beispiel:Der Vorteil dieses Ansatzes ist, dass es macht es explizit, wenn es nicht passt. Andere Personen mit Ihrer Funktion nicht brauchen, um zu wissen, dass
None
ist der return-Wert, den Sie erwarten sollten, wenn es nicht ein Spiel und Sie kann die Ausnahme behandeln, wie Sie sehen, passen.InformationsquelleAutor forty_two