前面我听说eval(input(a))
会自动将字符串转换为整型,但如果我编写了
age = eval(input("enter age"))
在输入过程中,我键入01是一个错误,但当我编码时
age = int(input("enter age"))
01作为输入可以完美地工作。为什么会这样呢?
发布于 2017-08-25 20:36:04
eval
计算python表达式的值。在Python3中,不允许以0
开头的数字(除了0000
,请参阅Why does 000 evaluate to 0 in Python 3?)。在python 2中,这些被解释为八进制(以8为基数)数字。不是更好。(Python3base 8现在只使用Oo
前缀)
int
执行字符串到整数的转换,因此它不能计算复杂表达式(您不需要),但不受前导零语法的约束。
另一个很好的特性是,您可以使用一个简单且限定的try/except
块来检查输入的表达式是否为整数:
while True:
try:
age = int(input("enter age"))
break
except ValueError:
print("Retry!")
(使用eval
时,您必须防止所有异常)
建议:使用int
,因为它更安全,没有安全问题(eval可以计算任何表达式,包括系统调用和文件删除),并且非常适合您的目的。
注意:上面的代码在Python2中仍然是不安全的:input
的行为类似于eval
。您可以使用模块开头的简单代码来保护您的代码不受此影响:
try:
input = raw_input
except NameError:
pass
因此,Python2 input
不再是不可访问的,而是调用raw_input
。Python 3会忽略该代码。
发布于 2017-08-25 20:43:41
eval()
用于验证表达式。On number被认为是一个表达式,但八进制数(以0开头的数字)除外。int()
处理字符串到整数的转换。避免使用eval()
的原因有很多。只需记住:
安全风险:x=input(‘在此处输入数字:')
安全风险:x= eval(input('Enter number here:'))
此外,请记住,eval()
有可能运行代码,这可能会导致巨大的安全风险。我建议不要使用它,除非您清楚地知道自己在做什么,否则它可能会危及您的应用程序。
https://stackoverflow.com/questions/45881547
复制相似问题