unu*_*tbu 17

你可以使用ast.literal_eval:

In [6]: import ast

In [7]: ast.literal_eval('None') is None
Out[7]: True
Run Code Online (Sandbox Code Playgroud)

但是,如果您只需要转换为以下内容,则三元if-statement三元表达式会更快:'None'None

x = None if x == 'None' else x
Run Code Online (Sandbox Code Playgroud)


guc*_*CIV 6

更简洁,

>>> type(eval('None'))
<class 'NoneType'>
Run Code Online (Sandbox Code Playgroud)

尽管计算表达式 有点儿...

如果您有兴趣,基本上,如果您在生产中使用它,例如在 Web 服务器上,并且有人提交了最终通过 eval() 的某些内容(以表单或其他形式),他们基本上可以访问在您的服务器上运行的具有直接写入访问权限的 python shell 的有限版本。

例如,根据您导入的内容,即使 Web 服务器代码中的 eval() 不直接评估提交的文本,随着时间的推移,他们也可以弄清楚如何通过诸如此类的好东西发送,

eval(subprocess.call('sudo rm -rf /')),擦除您的服务器,

eval(sys.exit()) 停止网络服务器,

eval(subprocess.call('ls -R -a /'))列出服务器上的每个文件,然后您可以将其传输到文件中并使用 curl 将其发送给您自己。

因此,至少可以说,这可能是危险的。