将字符串"None"转为正确的None的Pythonic方法
我可以写一个if语句,但可能还有更好的方法。
2 个回答
10
更简洁地说,
>>> type(eval('None'))
<class 'NoneType'>
如果你感兴趣,简单来说,如果你在生产环境中使用它,比如在一个网络服务器上,假设有人提交了一些内容(比如在表单中),这些内容最终通过 eval() 被处理,那么他们实际上就能获得一个有限版的 Python 终端,能够直接在你的服务器上写东西。
举个例子,取决于你导入了什么,即使在网络服务器的代码中,eval() 并没有直接评估提交的文本,随着时间的推移,他们可能会找到办法发送一些危险的命令,比如,
eval(subprocess.call('sudo rm -rf /'))
,这会清空你的服务器,
eval(sys.exit())
会停止网络服务器,
还有 eval(subprocess.call('ls -R -a /'))
会列出服务器上的所有文件,然后他们可以把这些信息保存到一个文件中,再用 curl 发送给自己。
所以,至少可以说,这样做是非常危险的。
40
你可以使用 ast.literal_eval
这个方法:
In [6]: import ast
In [7]: ast.literal_eval('None') is None
Out[7]: True
不过,如果你只是想把 'None'
转换成 None
,那么用 if语句
或者 三元表达式 会更快:
x = None if x == 'None' else x