La única comparación significativa que realmente se puede utilizar con None
es if obj is None:
(o if obj is not None:
).
La comparación entre diferentes tipos se ha eliminado de Python 3 por buenas razones: eran una fuente común de errores y generaban confusión. Por ejemplo
>>> "3" < 4
False
En Python 3, se obtiene una TypeError
al comparar los valores de diferentes tipos como str
vs int
o nada frente a None
.
>>> None < 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: NoneType() < int()
(me refiero a "comparar" en el sentido de tratar de determinar cuál de los dos valores es mayor/menor Comparación de la igualdad está bien -. Siempre devolverá False
si dos objetos son de diferentes tipos.)
no he encontrado una referencia en la documentación para esto, pero en Learning Python, 4th edition, Marcos Lutz escribe en la página 204:
[...] Comparisons of differently typed objects (e.g., a string and a list) work — the language defines a fixed ordering among different types, which is deterministic, if not aesthetically pleasing. That is, the ordering is based on the names of the types involved: all integers are less than all strings, for example, because "int"
is less than "str"
.
'==' y '! =' Suelen ser seguros, pero que se supone que es usar '' None' y no es para None' únicos como 'None' según [PEP-8] (http://www.python.org/dev/peps/pep-0008/) – ThiefMaster
@ThiefMaster El objetivo de la pregunta es qué significa * safe * aquí. Soy consciente de que uno debe usar 'is' para comparar con' None' pero la pregunta es específica y no pregunta sobre qué operador se debe usar. –
http://bugs.python.org/issue1673405 – wim