Ich mag hier ein wenig pedantisch sein, aber ich würde sagen, die beste Antwort ist
if my_var is not None and 'something' in my_var:
Der Unterschied ist die explizite Prüfung auf None
, anstatt die implizite Konvertierung von my_var
zu True
oder False
.
Während ich in Ihrem Fall sicher bin, dass die Unterscheidung nicht wichtig ist, wäre es im allgemeineren Fall durchaus möglich, dass die Variable nicht, None
sondern dennoch ausgewertet wird False
, beispielsweise ein ganzzahliger Wert von 0
oder eine leere Liste.
Entgegen den meisten Behauptungen der anderen Poster, dass es sicher ist, würde ich sagen, dass es sicher ist, solange Sie explizit sind. Wenn Sie nicht überzeugt sind, dann betrachten Sie diese sehr erfundene Klasse:
class Contrived(object):
def __contains__(self, s):
return True
def __nonzero__(self):
return False
my_var = Contrived()
if 'something' in my_var:
print "Yes the condition is true"
if my_var and 'something' in my_var:
print "But this statement won't get reached."
if my_var is not None and 'something' in my_var:
print "Whereas this one will."
Ja, ich weiß, dass dies kein realistisches Beispiel ist, aber es kommt zu Abweichungen im realen Code, insbesondere wenn None
ein Standardfunktionsargument angegeben wird.