我正在编写一个Python脚本来从特定端口获取数据。
所以我有一个while循环,只要端口打开就可以获取我的数据。
在这个while循环中,我正在添加一个变量,我们称之为foo1
。
当时间到了,我不想再获取任何数据。
所以伪代码如下所示:
foo1 = 0
try:
while True:
fetch data
foo1 = foo1 + 500
if time up:
break
finally:
close socket
print foo1
我的while循环内部foo1
正确加起来。但在循环之外
foo1
始终为零。你有什么想法吗?
只需与 coh0 交换 foo1 编辑:
import re
coh = [0]
nachricht = ' S="0" '
coh0 = 0
time = 0
try:
while True:
time += 1
coh = re.findall(r'\bS="\d"', nachricht)
coh_value = re.findall(r'\d', coh[0])
if coh:
if int(coh_value[0]) == 0:
coh0 = int(coh0) + 500
print coh0
if time == 10:
coh0 = int((int(coh0)/500)/120)
print "Here coh0 is zero again",int(coh0)
break
finally:
pass
print "Here coh0 is zero again",int(coh0)
答案 0 :(得分:4)
该行
coh0 = int((int(coh0)/500)/120)
有效地执行60000的整数除法 - 它可以等效地写为
coh0 //= 60000
如果在执行此行之前coh0
恰好小于60000,则之后它将为0。
我的while循环内部
foo1
正确加起来。但是在循环foo1
之外总是为零。
这是一个非常误导性的描述正在发生的事情。正如你自己注意到的那样,循环内部已经为零。
答案 1 :(得分:1)
您的示例不起作用,因为您没有声明foo1
的初始值,因此您在没有它的情况下引用它 - 这会抛出NameError
。如果确实声明了初始值,代码将起作用:
>>> x = 0
>>> while True:
... x += 1
... if x > 10:
... break
...
>>> x
11
不仅如此,但Python在while循环中没有命名空间,所以即使你的代码被修改为在while循环中生成y,它仍然可以工作:
>>> start = True
>>> while True:
... if start:
... y = 0
... start = False
... y += 1
... if y > 10:
... break
...
>>> y
11
请注意,这是一个非常人为的例子,实际上你真的很想做到这一点。
请给我们一个Short, Self Contained, Correct, Example,其中会显示您生成不需要的结果的代码,以及您想要的结果。因为您的问题根本不存在于Python中。
答案 2 :(得分:-1)
你必须在循环之前声明 foo1
foo1 = 0
while True:
fetch data
foo1 = foo1 + 500
您的案例中的变量 foo1 仅在中循环时具有可见范围,当您在循环中使用它时,它只是在全局范围内再次创建。