Python输入始终返回一个字符串

时间:2017-03-17 01:52:02

标签: python visual-studio

我通过Visual Studio Code运行此代码:

counter = 0
while True:
    max_count = input('enter an int:  ') 
    if max_count.isdigit():
        break
    print('sorry, try again')

max_count = int(max_count)  

while counter < max_count:
    print(counter)
    counter = counter + 1

看到这样的反应非常惊讶:

python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"                                   
malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"            
enter an int:  5                                                                                          
Traceback (most recent call last):                                                                        
  File "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py", line 7, in <module>              
    if max_count.isdigit():                                                                               
AttributeError: 'int' object has no attribute 'isdigit' 

因为input()总是应该返回一个字符串: https://docs.python.org/3.5/library/functions.html#input

我输入了一个引用的字符串:

malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"            
enter an int:  '5'
0                                                                         
1
2
3
4

现在它按预期工作。然后我在我的标准问题Ubuntu终端上运行它:

malikarumi@Tetuoan2:~/Documents/PYTHON/Blaikie Python$ python3 flatnested.py
enter an int:  5
0
1
2
3
4

它按预期工作,注意5周围没有引号。

这里发生了什么? Visual Studio Code&#39;重写了#39; Python的规则?

2 个答案:

答案 0 :(得分:1)

简答

当您通过Visual Studio Code运行代码时,似乎正在使用Python 2.7来运行代码。

如果您希望继续使用Python 2.7,请使用raw_input代替input功能。

<强>解释

查看Python 2.7 documentation的输入函数。它与Python 3.x中使用的输入函数不同。在Python 2.7中,输入函数使用eval函数来处理程序接收的输入,就好像输入是一行Python代码一样。

python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"                                   
malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"            
enter an int:  5                                                                                          
Traceback (most recent call last):                                                                        
  File "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py", line 7, in <module>              
    if max_count.isdigit():                                                                               
AttributeError: 'int' object has no attribute 'isdigit' 

上述案例中使用Python 2.7发生的事情是:

eval("5").isdigit() # 5.isdigit()

上面的Python语句无效,因为它导致尝试在整数上调用.isdigit()方法。但是,Python中的整数没有这种方法。

malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"            
enter an int:  '5'
0                                                                         
1
2
3
4

在上面的例子中,使用Python 2.7,发生了什么:

eval("'5'").isdigit() # '5'.isdigit()

上面的语句是有效的,因为它导致一个字符串调用.isdigit()方法,该方法确实存在于字符串中。

我希望这能回答您的问题并让您更清楚地了解Python 2.7和Python 3.x中input函数之间的差异。

答案 1 :(得分:0)

如果您正在使用Ubuntu(或其他LINUX发行版),在终端中输入python时,它与python2相等,因此您第一次使用python时,你使用Python 2而不是Python 3,这个错误是显而易见的。 为什么你把引号字符串放在原因,因为在Python 2中,input()等于eval(raw_input())

>>> input()
5 
5
# equal with eval(5), which is 5

带引号字符串

>>> input()
'5'
'5'
# equal with eval('5'), which is '5'

第二次,由于您明确使用python3

运行,因此按预期工作