esto no hace lo que se espera:
if var is 'stringone' or 'stringtwo':
dosomething()
Es lo mismo que:
if (var is 'stringone') or 'stringtwo':
dosomething()
que siempre es cierto, ya que 'stringtwo
se considera un valor "verdadero".
hay dos alternativas:
if var in ('stringone', 'stringtwo'):
dosomething()
o puede escribir tests de igualdad separadas,
if var == 'stringone' or var == 'stringtwo':
dosomething()
no utilice is
, porque is
compara la identidad del objeto. Puede que se salga con la suya a veces porque Python hace muchas prácticas, al igual que puede salirse con la suya en Java porque Java interviene en muchas cadenas. Pero no use is
a menos que realmente desee la identidad del objeto.
>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True # but could be False
Estoy bastante seguro de que los dos errores se han cubierto anteriormente. –
para la distinción is /==: http://stackoverflow.com/questions/1504717/python-vs-is-comparing-strings-is-fails-sometimes-why – tanantish