知行编程网知行编程网  2022-11-20 23:30 知行编程网 隐藏边栏  15 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python中使用raw input失败的原因的相关知识,希望可以帮到处于编程学习途中的小伙伴

python中无法使用原始输入的原因

这两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子。

1.输入为纯数字时

input返回的是数值类型,如int,float

raw_inpout返回的是字符串类型,string类型

#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = input('input:')
print 'type of input', type(a)
b = raw_input('raw_input:')
print 'type of raw_input', type(b)

输出:

input:1
type of input <type 'int'>
raw_input:1
type of raw_input <type 'str'>

2.输入为计算公式时

#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = input('input:')
print a
b = raw_input('raw_input:')
print b

输出:

input:1+2
3
raw_input:1+2
1+

3.输入为字符串时

#!/usr/bin/python
# -*- coding: UTF-8 -*-
b = raw_input('raw_input:')
print b
a = input('input:')
print a

输入a:

raw_input:a
a
input:a
Traceback (most recent call last):
  File "D:/python_learning/test/cookbook/input raw_input.py", line 5, in <module>
    a = input('input:')
  File "<string>", line 1, in <module>
NameError: name 'a' is not defined
输入'a':
raw_input:'a'
'a'
input:'a'
a

从对比可以看出,raw_input()直接从控制台读取输入(它可以接受任何类型的输入)。至于 input() ,它希望能够读取一个合法的 python 表达式,也就是说,当你输入一个字符串时,你必须用引号将它括起来,否则它会引发 SyntaxError 。

raw_input() 将所有输入都视为一个字符串,并返回一个字符串类型。而input()在处理纯数字输入时有自己的特点,它返回输入数字的类型(int,float),input()可以接受合法的python表达式,例如:input(1+3)会返回4类型为 int。

查看实现方式:

def input(prompt=None): # real signature unknown; restored from __doc__
    """
    input([prompt]) -> value
    
    Equivalent to eval(raw_input(prompt)).
    """
    pass

input()本质上是使用raw_input()实现的,调用raw_input()后调用eval()函数即可,所以你甚至可以将表达式作为input()的参数,它会计算表达式值并返回。

不过在 Built-in Functions 里有一句话是这样写的:Consider using the raw_input() function for general input from users.

eval() 函数将字符串 str 评估为有效表达式并返回计算结果。存在一定的风险。如果用户输入__import__('os').system('dir'),你会发现当前目录下的文件会显示在用户面前,然后继续输入open('文件名') .read(),代码就会被人看到。获取完成后,发出删除命令,文件消失。哭!因此,除非对input()有特殊需求,否则我们一般推荐使用raw_input()与用户进行交互。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享