之前我听说eval(input(a))会自动将字符串转换为int,但如果我编码
age = eval(input("enter age"))
Run Code Online (Sandbox Code Playgroud)
在输入期间我输入01这是一个错误,但当我编码
age = int(input("enter age"))
Run Code Online (Sandbox Code Playgroud)
01输入效果很好.为什么?
eval()用于验证表达式。On number 被视为表达式,八进制数(以 0 开头的数字)除外。int()处理字符串到整数的转换。您应该避免使用的原因有很多eval()。请记住:
Python 2.x
x = raw_input('Enter number here: ')
Run Code Online (Sandbox Code Playgroud)Python 3.x
x = input('Enter number here: ')
Run Code Online (Sandbox Code Playgroud)Python 2.x
安全风险:
x = input('Enter number here: ')
Run Code Online (Sandbox Code Playgroud)Python 3.x
安全风险:
x = eval(input('Enter number here: '))
Run Code Online (Sandbox Code Playgroud)另外,请记住,它eval()有可能运行代码,这可能会导致巨大的安全风险。我建议不要使用它,除非您清楚地知道自己在做什么,否则它可能会损害您的应用程序。
eval评估python表达式.在python 3中,0不允许以数字开头的数字(除了0000,请参阅为什么000在Python 3中评估为0?).在python 2中,那些被解释为八进制(基数为8)的数字.不是更好......(python 3 base 8现在只使用Oo前缀)
int 执行字符串到整数转换,因此它无法计算复杂表达式(您不需要),但不受此前导零语法的影响.
另一个不错的功能是,您可以使用简单且合格的try/except块来检查输入的表达式是否为整数:
while True:
try:
age = int(input("enter age"))
break
except ValueError:
print("Retry!")
Run Code Online (Sandbox Code Playgroud)
(eval你必须防止所有例外)
建议:使用int,因为它更安全,没有安全问题(eval可以评估任何表达式,包括系统调用和文件删除),并且完全符合您的目的.
注意:上面的代码仍然不安全python 2:input行为就像eval.您可以使用模块开头的简单代码来保护您的代码:
try:
input = raw_input
except NameError:
pass
Run Code Online (Sandbox Code Playgroud)
所以python 2 input不再无法访问,raw_input而是调用.Python 3忽略了该代码.
| 归档时间: |
|
| 查看次数: |
5486 次 |
| 最近记录: |