2012-06-12 5 views
0

J'ai l'instruction IF;Type (s) d'opérande non pris en charge pour 'str' et 'str'. Python

if contactstring == "['Practice Address Not Available']" | contactstring == "['']": 

Je ne suis pas sûr de ce qui va mal (peut-être le «s ' »?) Mais je continue à obtenir l'erreur mentionnée dans le titre.

J'ai regardé dans d'autres questions des réponses, mais toutes semblent être sur l'utilisation des opérations mathématiques sur les chaînes, ce qui n'est pas le cas ici. Je sais que cette question est un peu paresseux, mais j'ai été le codage toute la journée et je suis épuisé, je veux juste en finir rapidement. (Python newb)

+3

vous pouvez utiliser le mot clé 'or' au lieu du caractère' | ' – avasal

Répondre

11

| est un opérateur ou en binaire Python, et a la priorité pour que Python parse ce que:

if contactstring == (""['Practice Address Not Available']"" | contactstring) == "['']": 

qui génère l'erreur que vous voyez.

Il semble ce que vous voulez est un opérateur ou logique, qui est écrit « ou » en Python:

if contactstring == ""['Practice Address Not Available']"" or contactstring == "['']": 

fera ce que vous attendez. Cependant, puisque vous comparez la même variable une plage de valeurs, ce qui est encore mieux:

if contactstring in ("['Practice Address Not Available']", ['']): 
+0

+1 pour expliquer la priorité. –

3

Le | est un operator qui bitwise doesn ne fonctionne pas sur les chaînes ...

L'utilisation de or (un opérateur logique booléen) donnera de meilleurs résultats.

2

Le problème est ici le ou opérateur au niveau du bit |. Dans un contexte booléen qui fonctionne normalement bien, mais | a une priorité supérieure à == alors Python essaie d'abord d'évaluer "['Practice Address Not Available']" | contactstring. Ces deux opérandes sont des chaînes, et vous ne pouvez pas faire deux ou deux chaînes. En utilisant le plus correct, or évite ce problème, car sa priorité est inférieure à ==.

+0

+1 pour expliquer la précédence. –

Questions connexes