Dado que la discusión anterior parece haber establecido que cualquiera de las variables podría ser None
, un enfoque sería (suponiendo que desea establecer object.updated_date
cuando alguna de las variables es None
):
if None in (past, object.updated_date) or object.updated_date >= past:
object.updated_date = now
punto siendo que el cheque None in (past, object.updated_date)
puede ser más útil que la alternativa semánticamente equivalente (past is None or object.update_date is None)
(podría decirse que es un épsilon más legible gracias a su mejor compacidad, pero es, por supuesto, una cuestión de estilo argumentable).
Como un aparte, y una cuestión de estilo menos discutible ;-), recomiendo enfáticamente que no se usen nombres incorporados como nombres para sus propias variables (y funciones, etc.) - object
es una construcción en nombre que en este contexto se está utilizando claramente para sus propios fines. Usar obj
en su lugar es más conciso, aún legible (podría decirse que más ;-), y no tiene inconvenientes. Es poco probable que seas "mordido" en un caso dado por la práctica dudosa de "sombrear" nombres incorporados con el tuyo, pero finalmente sucederá (ya que necesitas el significado normal del nombre oculto durante algún tiempo). operación de mantenimiento ordinario posterior) y es posible que se encuentre en una situación de depuración confusa; mientras tanto, corre el riesgo de confundir a otros lectores/mantenedores ... y no obtiene absolutamente ninguna ventaja a cambio de estas desventajas.
que se dan cuenta de que muchos de los nombres de Python construidos-ins' son una "molestia atractiva" en este sentido ... file
, object
, list
, dict
, set
, min
, max
...todo el nombre aparentemente atractivo para "un archivo", "un objeto", "una lista", etc. ¡Pero, vale la pena aprender a resistir esta tentación particular! -)
No hay forma de que pueda obtener ese error en esa línea si ambas son instancias de 'datetime.datetime'. –