访问while循环之外的变量,Python

时间:2012-06-14 14:14:44

标签: python sockets variables loops while-loop

我正在编写一个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)

3 个答案:

答案 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 仅在循环时具有可见范围,当您在循环中使用它时,它只是在全局范围内再次创建。