In einigen anderen Sprachen, die ich kenne, sollte das intuitive Ergebnis einer Umwandlung von null in eine Zeichenfolge eine leere Zeichenfolge sein. Warum Python soll "None" eine Art spezielle Zeichenfolge sein? Und dies zusätzliche Arbeit führen kann, wenn ein Rückgabewert einer FunktionWarum Python, das als str (None) entworfen wurde, gibt 'None' statt einer leeren Zeichenfolge zurück?
Prüfungresult = foo() # foo will return None if failure
if result is not None and len(str(result)) > 0:
# ... deal with result
pass
wenn str (None) leere Zeichenfolge zurückgibt, könnte der Code kürzer sein:
if len(str(result)) > 0:
# ... deal with result
pass
Sieht aus wie Python versucht wird um ausführlich zu sein, Log-Dateien verständlicher zu machen?
Dies beantwortet nicht wirklich Ihre Frage, aber es umgeht Ihr Problem. 'bool (None) == False', aber _also_' bool ('') == False'. In Wirklichkeit müssen Sie also nur 'if result: # pass' überprüfen, da '' '' und 'None' beide False auswerten. Ich werde versuchen, einige Gründe für die Wahl von 'str (None) == 'None' zu finden, aber ich denke nicht, dass es Auswirkungen auf Ihren Code haben sollte, wenn Sie nur überprüfen, ob eine richtige Zeichenfolge zurückgegeben wurde. – pswaminathan
Es ist nur zusätzliche Arbeit, weil die von Ihnen definierte Bedingung peinlich ist: "Behandle nur das Ergebnis, wenn es nicht None ist oder seine Zeichenfolgendarstellung nicht leer ist".Verwenden Sie eine konventionellere Art der Überprüfung (wie von @ Pswaminathan vorgeschlagen) und das Problem verschwindet. – vanza
Wenn 'foo' im Fehlerfall' None' zurückgibt, müssen Sie nach 'None' suchen. In Ihrem Beispiel wird alles, dessen Zeichenfolgendarstellung leer ist, anscheinend genauso behandelt wie "Keine", aber es gibt keinen besonderen Grund, warum dies das Standardverhalten sein sollte. Die Frage ist, warum verwenden Sie "Länge von str (x)" als Diagnose für irgendetwas? – BrenBarn