gpt4 book ai didi

python - 为什么方法调用后命名空间会发生变化?

转载 作者:行者123 更新时间:2023-11-28 19:52:00 25 4
gpt4 key购买 nike

我正在创建一个类,但在 python 中的命名空间方面遇到了一些问题。

您可以看到下面的代码,它大部分工作正常,但是在调用 guiFrame._stateMachine() 之后,时间模块不知何故不再定义。

如果我在 _stateMachine() 中重新导入时间模块,它就会工作。但是为什么我在head中import的时候time模块不在namespace中呢?

我错过了什么吗?

错误信息:

  File "C:\Scripts\Python\GUI.py", line 106, in <module>
guiFrame._stateMachine()
File "C:\Scripts\Python\GUI.py", line 74, in _stateMachine
self.tempfile.write('%s cpuUMTS %s\n' % (time.asctime(time.localt
f.load.cpuThreadsValue['10094']))
UnboundLocalError: local variable 'time' referenced before assignment

代码:

import os
import cpu_load_internal
import throughput_internal
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

from Tkinter import *
import tkMessageBox
import time
class GUIFramework(Frame):
"""This is the GUI"""

def __init__(self,master=None):
"""Initialize yourself"""

"""Initialise the base class"""
Frame.__init__(self,master)

"""Set the Window Title"""
self.master.title("Type Some Text")

"""Display the main window
with a little bit of padding"""
self.grid(padx=10,pady=10)
self.CreateWidgets()
plt.figure(1)

def _setup_parsing(self):
self.load = cpu_load_internal.CPULoad('C:\Templogs')
self.throughput = throughput_internal.MACThroughput('C:\Templogs')
self.tempfile = open('output.txt','w')
self.state = 0

def _parsing(self):
self.load.read_lines()
self.throughput.read_lines()
self.cpuLoad.set(self.load.cpuThreadsValue['10094'])
self.macThroughput.set(self.throughput.macULThroughput)

def __change_state1(self):
self.state = 2

def __change_state3(self):
self.state = 3

def CreateWidgets(self):
"""Create all the widgets that we need"""

"""Create the Text"""
self.cpuLoad = StringVar()
self.lbText1 = Label(self, textvariable=self.cpuLoad)
self.lbText1.grid(row=0, column=0)

self.macThroughput = StringVar()
self.lbText2 = Label(self, textvariable=self.macThroughput)
self.lbText2.grid(row=0, column=1)

self.butStart = Button(self, text = 'Start', command = self.__change_state1)
self.butStart.grid(row=1, column=0)

self.butStop = Button(self, text = 'Stop', command = self.__change_state3)
self.butStop.grid(row=1, column=1)

def _stateMachine(self):
if (self.state == 2):
print self.throughput.macULUpdate
print self.load.cpuUpdate

if self.load.cpuUpdate:
self.load.cpuUpdate = 0
print 'cpuUMTS %s\n' % (self.load.cpuThreadsValue['10094'])
self.tempfile.write('%s cpuUMTS %s\n' % (time.asctime(time.localtime()), self.load.cpuThreadsValue['10094']))

if self.throughput.macULUpdate:
self.throughput.macULUpdate = 0
print 'macUL %s %s\n' % (self.throughput.macULThroughput, self.throughput.macULThroughputUnit)
self.tempfile.write('%s macUL %s %s\n' % (time.asctime(time.localtime()), self.throughput.macULThroughput, self.throughput.macULThroughputUnit))

if (self.state == 3):
self.tempfile.seek(0)
plt.plot([1,2,3],[1,4,6])
plt.savefig('test.png')
self.state == 0
while 1:
try:
line = (self.tempfile.next())
except:
break

if 'cpuUMTS' in line:
line.split
time = 4


if __name__ == "__main__":
guiFrame = GUIFramework()
print dir(guiFrame)
guiFrame._setup_parsing()
guiFrame.state = 2
while(1):
guiFrame._parsing()
guiFrame._stateMachine()
guiFrame.update()
time.sleep(0.1)

最佳答案

为什么分配给时间?您不能将它用作局部变量,它会使模块黯然失色!如果您仔细观察,它会提示您在分配给它之前使用了 time - 因为将它用作 _stateMachine 中的局部变量。

time = 4

关于python - 为什么方法调用后命名空间会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1361393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com