我有一个奇怪的Python初学者问题,。。在解释器中的虚拟环境中玩(python 3.5):
我有一个混合类型的列表:
lissi = ["foo", "bar". "boo", "baz", 4, 7]
然后“意外地”尝试打印出for循环中的所有元素,这些元素连接到一个字符串:
for x in lissi:
print("Hallo " + x)
当然,这是不可能的。我们不能集中注意力。一个字符串的整数-所以第一个元素被打印出来,然后有一个TypeError
然后我只键入"x" and enter
,看看是否还有数据存储,是的:x是4
type(x)
是int
(试着弄清楚7是否仍然存在)
所以我的问题是:Python中for循环中的“幕后”会发生什么:似乎每个成功处理的元素都被删除了,但是有一个backlog存储在x中,它是TypeError抛出的第一个元素?如果出现错误,有没有办法从内存中“清除”这些数据
泰铢
我相信问题不在于
for
循环,而在于print()
语句不能用
integer
来+
一个string
,例如:这不起作用:
这也不会:
如果它都是整数,它将工作:
从
print("Hallo " + 4)
显示的错误是“builtins.TypeError: Can't convert 'int' object to str implicitly
”解决方案是显式地将整数转换为字符串:
现在,对于你的问题,我不认为有什么东西是“后记”。
for x in lissi
的枚举仍然有效,x
仍然有效,只是在处理前4个枚举(其中x
是string
)时,print()
语句将工作,然后它在print()
语句上抛出错误,但是x
仍然是有效的integer
for循环是其声明范围的一部分,因此下面的代码将更改
x
的值:当元素是
"baz"
时,一切正常,print语句工作正常。Python随后继续执行。下一步是x = 4
。之后,print "Hallo" + x
失败并出现错误运行解释器时,捕获并打印错误,然后继续执行。解释器中出现错误后没有清理,因此检查值时,
x
的最后一个值仍然存在。这就是为什么你会看到4它不是积压工作,也不像“每个成功处理的元素都会被删除”。
基本上,每次迭代
for
循环都会给变量x
分配listlissi
的下一个元素的值(不必是list,可以是任何iterable)。每当循环由于异常或
break
语句而中断时,变量x
保持不变,因此它包含由for
循环分配的最后一个值。这是可以的,因为循环在Python中没有任何独立的作用域,实际上可以方便地在iterable中搜索感兴趣的元素,在找到循环时会中断循环,并且在离开循环之前不会被迫将其存储在另一个变量中
相关问题 更多 >
编程相关推荐