Deutsch   English   Français   Italiano  
<87ilpsy78b.fsf@universite-de-strasbourg.fr.invalid>

View for Bookmarking (what is this?)
Look up another Usenet article

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 <alain@universite-de-strasbourg.fr.invalid>
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: <t6ndp3$1igp$1@gioia.aioe.org>
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 <zzz@aol.com.invalid> 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.