【问题标题】:What would the following line of code do `eval("os.system('clear')", {})`?以下代码行 `eval("os.system('clear')", {})` 会做什么?
【发布时间】:2020-02-21 07:12:38
【问题描述】:

我听说这是灾难性的。为什么?

import os
eval("os.system('clear')", {})

编辑:

添加了import os。将代码视为几行更大的程序。所有必要的导入都已到位,等等......

【问题讨论】:

  • 添加 import os 仍然没有做任何事情,因为您在未发生导入的全局环境中明确评估您的表达式。
  • 其实这个在rassar的回答里已经给你解释过了。

标签: python python-3.x operating-system


【解决方案1】:

那行没有做任何事情 - os.system('clear') 会清除屏幕,但由于 os 没有导入它只是错误。

该行的{} 部分在没有内置函数、变量或上下文的情况下评估代码,因此即使您更早导入os,它仍然会出错:

>>> eval("os.system('clear')", {})
NameError: name 'os' is not defined
>>> import os
>>> eval("os.system('clear')", {})
NameError: name 'os' is not defined

eval 本身非常危险 - 当您不知道 eval 会做什么或用户输入时,不要运行它。

【讨论】:

  • os.system('clear') 不会在所有操作系统上清除屏幕。
  • 正确,在 Windows 上使用 os.system('CLS')
  • True...所以 IMO,这行代码主要是说明 eval() 如何做一些危险的事情——只是以一种即使以某种方式成功也不会造成伤害的方式呈现执行。
猜你喜欢
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 2013-10-18
  • 1970-01-01
相关资源
最近更新 更多