早些时候我听说eval(input(a))
会自动将字符串转换为 int,但是如果我编码
age = eval(input("enter age"))
在输入期间我输入 01 这是一个错误,但是当我编码时
age = int(input("enter age"))
01 作为输入效果很好。为什么?
eval
计算 python 表达式。在 python 3 中,数字以0
不允许(除了0000
, see 为什么 000 在 Python 3 中计算结果为 0?)。在 python 2 中,这些被解释为八进制(基数 8)数字。不是更好...(python 3 base 8 现在专门使用Oo
prefix)
int
执行字符串到整数的转换,因此它无法计算复杂的表达式(您不需要),但不受这种前导零语法的影响。
另一个不错的功能是,您可以使用简单且合格的方法检查输入的表达式是否为整数try/except
block:
while True:
try:
age = int(input("enter age"))
break
except ValueError:
print("Retry!")
(with eval
你必须防止所有异常)
建议:使用int
,因为更安全,不存在安全问题(eval可以评估any表达式,包括系统调用和文件删除),并且非常适合您的目的。
注意:上面的代码对于 python 2 仍然不安全:input
行为就像eval
。您可以使用模块开头的简单代码来保护您的代码免受此影响:
try:
input = raw_input
except NameError:
pass
所以蟒蛇2input
不再无法联系并调用raw_input
反而。 Python 3 忽略该代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)