Path: csiph.com!aioe.org!xGMmvc8Er4yC66bq3sGgDA.user.gioia.aioe.org.POSTED!not-for-mail From: Julien Palard Newsgroups: fr.comp.lang.python Subject: =?UTF-8?Q?Re=3a_int=c3=a9r=c3=aat_de_la_fonction_eval_=3f?= Date: Fri, 4 Dec 2020 00:31:51 +0100 Organization: Aioe.org NNTP Server Lines: 53 Message-ID: References: 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 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)