Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.lang.python > #3399

Re: intérêt de la fonction eval ?

Path csiph.com!aioe.org!xGMmvc8Er4yC66bq3sGgDA.user.gioia.aioe.org.POSTED!not-for-mail
From Julien Palard <julien@palard.fr>
Newsgroups fr.comp.lang.python
Subject Re: intérêt de la fonction eval ?
Date Fri, 4 Dec 2020 00:31:51 +0100
Organization Aioe.org NNTP Server
Lines 53
Message-ID <rqbsh5$19nu$1@gioia.aioe.org> (permalink)
References <rpu2t8$5k1$1@gioia.aioe.org>
NNTP-Posting-Host xGMmvc8Er4yC66bq3sGgDA.user.gioia.aioe.org
Mime-Version 1.0
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 8bit
X-Complaints-To abuse@aioe.org
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.5.0
Content-Language fr
X-Notice Filtered by postfilter v. 0.9.2
Xref csiph.com fr.comp.lang.python:3399

Show key headers only | View raw


Bonjour,

Le 2020-11-28 à 18:54, Dominique a écrit :
> Tout est dans le sujet : à quoi sert la fonction eval par rapport à un 
> print normal ou une bête égalité.

Les cas d'utilisation légitime sont rares, eval reste un aimant à faille 
de sécurité.

Le gros cas d'utilisation légitime qui me vient en tête c'est pour 
"interpréter" de la configuration.

Par exemple, si tu as un fichier de conf, (toml, ini, yaml, peu 
m'importe), et que tu veux que ton utilisateur puisse entrer une durée 
en seconde, tu peux lui permettre d'écrire :

     timeout: 60 * 60 * 24

au lieu de `timeout: 86400`, qui est plus lisible. Dans ton code ça se 
traduira par un :

     timeout = eval(config["timeout"])

Dans la même série la configuration pourrait permettre de nommer une 
classe à utiliser pour faire une certaine chose, et utiliser 
`eval(class_name)` pour instancier la classe, logging le fait par 
exemple [1]:

     handlers:
       console:
         class: logging.StreamHandler

Ou une condition :

     run_at: hour < 10

qui se traduira dans le code par un :

     eval(config["run_at"], {}, {"hour": datetime.datetime.now().hour})

On trouve d'autres utilisations légitimes de eval pour exécuter du code 
dans un autre contexte (dans un IDE ou un débogeur par exemple) en 
utilisant le 2ème et 3ème paramètre.

Ça reste des cas très spécifiques, mais suffisants pour ne pas supprimer 
eval. Et je ne peux que conclure par : attention, c'est un aimant à 
failles de sécurité.


[1]: https://docs.python.org/3/howto/logging.html#configuring-logging

-- 
[Julien Palard](https://mdk.fr)

Back to fr.comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

intérêt de la fonction eval ? Dominique <zzz@aol.com.invalid> - 2020-11-28 18:54 +0100
  Re: intérêt de la fonction eval ? Julien Palard <julien@palard.fr> - 2020-12-04 00:31 +0100
    Re: intérêt de la fonction eval ? Dominique <zzz@aol.com.invalid> - 2020-12-04 05:38 +0100
      Re: intérêt de la fonction eval ? Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2020-12-04 07:38 +0100
        Re: intérêt de la fonction eval ? Dominique <zzz@aol.com.invalid> - 2020-12-05 05:33 +0100
          Re: intérêt de la fonction eval ? Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2020-12-05 08:59 +0100
            Re: intérêt de la fonction eval ? Dominique <zzz@aol.com.invalid> - 2020-12-06 04:44 +0100

csiph-web