Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python类型似乎是由后面的代码而不是当前类型决定的_Python_Types - Fatal编程技术网

Python类型似乎是由后面的代码而不是当前类型决定的

Python类型似乎是由后面的代码而不是当前类型决定的,python,types,Python,Types,我对我刚刚实现的Python代码感到困惑(为此进行了简化) 这段代码在第四行有一个bug-它应该是userInput=input() 但是,当代码运行时,它会立即在第二行出现错误,并显示消息“AttributeError:“builtin\u function\u或\u method”对象没有属性“lower” 我的理解是,此时用户输入的类型应该是字符串 修复第四行上的错误会使程序按预期运行-也就是说,它不再在第2行出错 在这里,我是否缺少一些明显的东西,或者在Python如何确定类型的过程中,

我对我刚刚实现的Python代码感到困惑(为此进行了简化)

这段代码在第四行有一个bug-它应该是userInput=input()

但是,当代码运行时,它会立即在第二行出现错误,并显示消息“AttributeError:“builtin\u function\u或\u method”对象没有属性“lower”

我的理解是,此时用户输入的类型应该是字符串

修复第四行上的错误会使程序按预期运行-也就是说,它不再在第2行出错


在这里,我是否缺少一些明显的东西,或者在Python如何确定类型的过程中,这是一些微妙的东西?Python版本是3.6.12。

它太快了,你看不见


代码正在执行,当它进入类型已更改的第二次迭代时,将引发错误。您可能没有注意到您编写的消息是在出错之前打印的。

在Python中,类型链接到对象本身,而不是名称。因此,当您键入
userInput=input
时,名称将重新分配给函数对象,stringvalue“invalid”不再相关。然后在第2行中,您尝试访问
userInput.lower
,但是
userInput
现在绑定到函数
input
,并且
input
没有名为
lower
的属性,这会导致属性错误。

在您执行代码后,您应该首先看到打印输出的“您想继续吗?(y/n)”然后抛出错误

第三行代码将
userInput:str
类型重新分配给内置函数
Input

我建议如下

userInput = 'invalid'
while userInput.lower() not in ['y', 'n']:
     userInput = input('Do you want to continue? (y/n)')
     print("My input is {}".format(userInput))
else:
    print("finish input")

希望它能帮助你,谢谢

它不会立即出错。错误发生在第二个循环调用上。由于这个bug,循环在不等待用户输入的情况下连续运行,当然第二次调用发生得非常快。哦。。。当然我在拍脸。谢谢你发现了,我快疯了。谢谢。这应该教会我在早上喝咖啡之前不要在上面写问题。
userInput = 'invalid'
while userInput.lower() not in ['y', 'n']:
     userInput = input('Do you want to continue? (y/n)')
     print("My input is {}".format(userInput))
else:
    print("finish input")