Path: ...!weretis.net!feeder8.news.weretis.net!news.mixmin.net!aioe.org!K7PIs9tCGQ+WHJa7e6BylQ.user.46.165.242.75.POSTED!not-for-mail From: Alain Ketterlin Newsgroups: fr.comp.lang.python Subject: Re: Comportement =?utf-8?Q?=C3=A9trange?= avec IN et OR... Date: Thu, 26 May 2022 11:27:00 +0200 Organization: =?utf-8?Q?Universit=C3=A9?= de Strasbourg Message-ID: <87ilpsy78b.fsf@universite-de-strasbourg.fr.invalid> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: gioia.aioe.org; logging-data="38464"; posting-host="K7PIs9tCGQ+WHJa7e6BylQ.user.gioia.aioe.org"; mail-complaints-to="abuse@aioe.org"; User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux) Cancel-Lock: sha1:4PZ79utAq4Rc4RcGirtdmYSVcFg= X-Notice: Filtered by postfilter v. 0.9.2 Bytes: 2762 Lines: 58 Dominique writes: > test=3D'[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)' > test2=3Dlist(test.split(' ')) > '*ERROR*' or 'ERR' in test2 Cela ne signifie pas ce que tu crois. Cette expression est interpr=C3=A9t= =C3=A9e comme : - est-ce que =C2=AB '*ERROR*' =C2=BB est vraie ? - sinon, est-ce que =C2=AB 'ERR' in test2 =C2=BB est vraie ? Techniquement c'est ('*ERROR*') or ('ERR' in test2) L'op=C3=A9rande de gauche ne mentionne m=C3=AAme pas test2. La premi=C3=A8re condition ('*ERROR*') est toujours v=C3=A9rifi=C3=A9e (par= ce qu'une cha=C3=AEne de caract=C3=A8res est consid=C3=A9r=C3=A9e comme vraie d=C3=A8= s qu'elle n'est pas vide). D'autre part "x or y" a la valeur de x si x est vraie, et sinon la valeur de y : en clair, une valeur brute (comme '*ERROR*') est convertie en bool=C3=A9en pour tester sa v=C3=A9racit=C3=A9, mais l'express= ion garde la valeur non convertie. (Au passage, c'est une illustration de l'aversion de python pour le typage. Par exemple le r=C3=A9sultat de x or "Damned" o=C3=B9 x est un entier, sera soit un entier (si x !=3D 0) soit une chaine = de caract=C3=A8res. Pure perversit=C3=A9.) Bref : ce que tu veux (probablement) est '*ERROR*' in test2 or 'ERR' in test2 Il faut faire deux tests "in", on ne peut pas tester deux valeurs en m=C3=AAme temps avec "in" : ce qui est =C3=A0 gauche de "in" doit =C3=AAtre= une cha=C3=AEne (dans ton cas). Si tu =C3=A9cris : ('*ERROR*' or 'ERR') in test2 le "or" est calcul=C3=A9 d'abord, et tu testes en substance =C2=AB '*ERROR*= ' in test2 =C2=BB. -- Alain.