Re: Comportement étrange avec IN et OR...

Liste des GroupesRevenir à fcl python 
Sujet : Re: Comportement étrange avec IN et OR...
De : use.reply.to (at) *nospam* INVALID.ADDRESS (Benoit Izac)
Groupes : fr.comp.lang.python
Date : 26. May 2022, 10:38:45
Autres entêtes
Message-ID : <871qwg3a6y.fsf@izac.org>
References : 1
Bonjour,

Le 26/05/2022 à 10:29, Dominique a écrit dans le message
<t6ndp3$1igp$1@gioia.aioe.org> :

Je dois commettre une erreur, mais je ne vois pas laquelle. J'extrais
une unique ligne d'un fichier log :
>
test='[22118.286892] i915 0000:00:02.0: [drm] *ERROR* AUX C/DDI C
(TC)/PHY TC1: did not complete or timeout within 10ms (status
0xad4003ff)'
>
Si je fais :
>
'ERR' in test
Out[122]: True
>
Le TRUE est valable, car il y a bien le mot ERRROR.

Car la chaîne de caractères contient bien « ERR » plus précisément.

Pour travailler sur des 'mots', je transforme mon string en une liste :
>
test2=list(test.split(' '))
>
On poursuit
>
test2[4]
Out[127]: '*ERROR*'
>
Tout est logique. Ensuite, je comprends moins bien :
>
'ERR' in test2
Out[129]: False

'ERR' n'est pas un éléments de la liste donc c'est normal.

Or, '*ERROR*' in test2
Out[130]: True

'*ERROR*' en est un.

D'accord, dans une liste, Python cherche une occurrence exacte. Si je
poursuis mes recherches :
>
'*ERROR*' or 'ERR' in test2
Out[131]: '*ERROR*'
>
Il me sort *ERROR* alors que je voulais simplement une sortie
booléenne, mais peu importe. Je remplace test2[4] avec 'essai' (je
supprime *ERROR*) et j'ajoute 'ERR' à test2 ;

Ce que tu veux c'est :
    '*ERROR*' in test2 or 'ERR' in test2
ou encore :
    any(s in test2 for s in ['*ERROR*', 'ERR'])

test2[4]='essai' puis test2.append('ERR')
Test2 est correctement modifiée. Or, si je fais ça :
>
'*ERROR*' or 'ERR' in test2
Out[137]: '*ERROR*'
>
Il me retrouve le mot'*ERROR*' que j'ai supprimé et pas 'ERR' que j'ai
ajouté !
>
C'est d'autant plus étrange que 'ERRE' est bien trouvé :
>
'ERR' in test2
Out[138]: True
>
Qu'est-ce qui peut expliquer ce comportement ?

'foo' or 'bar'
'foo'
'bar' or 'foo'
'bar'
False or 'foo'
'foo'
False or False
False

Le « or » renvoie la première occurrence qui n'est pas fausse. Une
chaîne de caractère non vide est toujours vrai.

--
Benoit Izac

Date Sujet#  Auteur
26 May 22 * Comportement étrange avec IN et OR...7Dominique
26 May 22 +* Re: Comportement étrange avec IN et OR...4Alain Ketterlin
26 May 22 i`* Re: Comportement étrange avec IN et OR...3Dominique
26 May 22 i `* Re: Comportement étrange avec IN et OR...2Olivier Miakinen
26 May 22 i  `- Re: Comportement étrange avec IN et OR...1Dominique
26 May 22 +- Re: Comportement étrange avec IN et OR...1Dominique
26 May 22 `- Re: Comportement étrange avec IN et OR...1Benoit Izac

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal