Marco82 hat geschrieben: Montag 7. September 2020, 13:21
Bei der Suche nach der Ursache bin ich auf folgendes Konstrukt gestoßen:
Code: Alles auswählen
if first_time and time and last_time and not first_time <= time <= last_time:
log.debug(f'Not in track (search for:{time}, start:{first_time}, end:{last_time})')
return None
Ich habe mir jetzt nicht alle Posts genau durchgelesen, also ist es möglich, dass es schon erwähnt worden ist.
Jedenfalls kann man bei dem Code annehmen, dass `fist_time` und `last_time` auch `None` sein können.
In diesem Fall muss man vorher den Check machen. Wenn z.B. first_time ein `None` ist, evaluiert es nach `False` und folgende AND Verknüpfungen werden erst gar nicht evaluiert.
Würde man diesen Check nicht machen, käme es zu einem Typeerror, wenn man versucht `None` zu vergleichen.
Code: Alles auswählen
message = None
if message and message.isupper():
print("message besteht aus Großbuchtsben")
Da passiert gar nichts, weil bool(message) ein False evaluiert und folgende AND-Verknüpfungen nicht ausgeführt werden.
Würde man den ersten Test weglassen und message wäre immer noch None und kein str, dann käme es zum TypeError, da das None-Objekt nicht die Methode `isupper` hat.
Eigentlich will man das alles gar nicht. Besser ist es immer nur einen Datentyp zurückzuliefern und nicht mal so und dann wieder anders.
Wenn man aber bereits fertigen Code nutzt, hat man keinen Einfluss darauf.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server