[Python-es] None < 0 ???

Oswaldo Hernández listas en soft-com.es
Mie Ene 2 23:14:54 CET 2008


Oswaldo Hernández escribió:
> Arnau Sanchez escribió:
>> Oswaldo Hernández escribió:
>>
>>> Si la definición de None es la ausencia de valor, la expresión None < 
>>> 1 ¿no deberia ser tambien false?
>>
>> Como "None" no implementa las "rich comparisons" (__gt__, __lt__, etc) 
>> no tiene mucho sentido compararlo con otros objetos. Al respecto la 
>> documentación dice:
>>
>> http://docs.python.org/ref/comparisons.html
>>
>> "The operators <, >, ==, >=, <=, and != compare the values of two 
>> objects. The objects need not have the same type. If both are numbers, 
>> they are converted to a common type. Otherwise, objects of different 
>> types always compare unequal, and are ordered consistently but 
>> arbitrarily."
>>
>> Sólo se le pide ser consistente, así que el resultado depende de la 
>> implementación. Si miramos las fuentes, en CPython vemos:
>>
>> (Objects/object.c)
>>
>> /* None is smaller than anything */
>>         if (v == Py_None)
>>                 return -1;
>>         if (w == Py_None)
>>                 return 1;
>>
>> Lo que explica el comportamiento que observas.
> 
> Ok, ya esta mas claro.
> El problema es que asocio None con el NULL de la base de datos, si en 
> PostgreSQL ejecuto:
> select case
>     when null = 0 then 'cero'
>     when null > 0 then 'positivo'
>     when null < 0 then 'negativo'
>     else 'nulo'
>     end
> 
Corrección de la sentencia:
select case
	when 0 is null then 'cero'
	when null > 0 then 'positivo'
	when null < 0 then 'negativo'
	else 'nulo'
	end

> El resultado es:
> 'nulo'
> 
> Ahora veo que None no es lo mismo que NULL.
> 
> Gracias.
> 


-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************


Más información sobre la lista de distribución Python-es