1

我正在编写一个 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总是为零。你有什么主意吗?

只需交换foo1coh0 编辑:

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)
4

3 回答 3

4

线

coh0 = int((int(coh0)/500)/120)

有效地执行整数除以 60000 - 它可以等效地写为

coh0 //= 60000

如果coh0在执行此行之前恰好小于 60000,则执行后将为 0。

在我的 while 循环内部foo1正确地加起来。但在循环之外foo1总是为零。

这是描述正在发生的事情的一种非常误导的方式。正如您自己注意到的那样,循环内它已经为零。

于 2012-06-14T15:22:31.927 回答
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

请注意,这是一个非常人为的示例,您实际上想要这样做的情况充其量是很少见的。

请给我们一个简短、自包含、正确的示例,该示例显示您的代码产生了您不想要的结果,以及您想要的结果。因为您的问题在 Python 中根本不存在。

于 2012-06-14T14:21:14.797 回答
-1

您必须在循环之前声明foo1

foo1 = 0
while True:
    fetch data
    foo1 = foo1 + 500

在您的情况下,变量foo1仅在while循环中具有可见性范围,当您在循环外使用它时,它只是在全局范围内再次创建。

于 2012-06-14T14:16:58.910 回答