Cela ne fait pas ce que vous attendez :
if var is 'stringone' or 'stringtwo':
dosomething()
C'est la même chose que :
if (var is 'stringone') or 'stringtwo':
dosomething()
Ce qui est toujours vrai, puisque 'stringtwo'
est considérée comme une valeur "vraie".
Il y a deux possibilités :
if var in ('stringone', 'stringtwo'):
dosomething()
Ou vous pouvez écrire des tests d'égalité séparés,
if var == 'stringone' or var == 'stringtwo':
dosomething()
N'utilisez pas is
parce que is
compare l'identité de l'objet. Vous pouvez parfois vous en tirer parce que Python interne beaucoup de chaînes de caractères, tout comme vous pouvez vous en tirer en Java parce que Java interne beaucoup de chaînes de caractères. Mais n'utilisez pas is
sauf si vous voulez vraiment l'identité de l'objet.
>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True # but could be False