NameError: name 'VAR' is not defined
NameError: name 'VAR' is not defined
我这里有一个 Python 脚本,用于确定作品的尺寸 space,然后确定自动化脚本应在何处单击或输入数据。
我 运行 遇到了一个问题,变量在一个函数中创建,但在另一个函数中无法访问。我返回了我想通过脚本继续使用的变量,但它给我一个错误,说它还没有被定义。
到目前为止,这是我的代码:
import pyautogui
import time
import finder
def areaSetup():
getWorkSpace('img/dimen/loginDimTop.png' , 'img/dimen/loginDimBot.png')
getWaHWorkSpace(workSpace)
getQuad1(workSpace,W, H, Hh, Wh)
getQuad2(workSpace,W, H, Hh, Wh)
getQuad3(workSpace,W, H, Hh, Wh)
getQuad4(workSpace,W, H, Hh, Wh)
return workSpace, quad1, quad2, quad3, quad4
def getWorkSpace(browTopLeft, browBotRight):
top = pyautogui.locateOnScreen( browTopLeft , grayscale=True)
print (top)
bottom = pyautogui.locateOnScreen( browBotRight , grayscale=True)
print (bottom)
x1, y1, h1, w1 = top
x2, y2, h2, w2 = bottom
x2 = x2+w2
y2 = y2+h2
print ("initial print" , x1, y1, x2, y2)
workSpace = x1, y1, x2, y2
print ("Workspace" , workSpace)
return workSpace
def getWaHWorkSpace(workSpace):
x1, y1, x2, y2 = workSpace #break it into four parts again
W = x2 - x1 #get the height
H = y2 - y1 #get the width
Hh = 0.5 * H #get mid point of height
Wh = 0.5 * W #get mid point of width
print ("W and H" , W, H, Hh, Wh)
return W, H, Hh, Wh
我的追溯如下:
(14, 40, 42, 47)
(694, 774, 342, 44)
initial print 14 40 738 1116
Workspace (14, 40, 738, 1116)
Traceback (most recent call last):
File "loginPage_001.py", line 35, in <module>
areaDimensions.areaSetup()
File "/home/tvorac/python/testBot/areaDimensions.py", line 7, in areaSetup
getWaHWorkSpace(workSpace)
NameError: name 'workSpace' is not defined
我很确定我忽略了一些简单的事情,并将继续查看 Python 文档,看看我是否能发现我做错了什么。
感谢您抽出宝贵时间来讨论这个问题!
我发现了我的错误!
当我在函数 areaSetup() 中调用它们时,我没有声明变量来自这些函数
这是我所做的:
def areaSetup():
workSpace = getWorkSpace ('img/dimen/loginDimTop.png' , 'img/dimen/loginDimBot.png')
W, H, Hh, Wh = getWaHWorkSpace(workSpace)
quad1 = getQuad1(workSpace,W, H, Hh, Wh)
quad2 = getQuad2(workSpace,W, H, Hh, Wh)
quad3 = getQuad3(workSpace,W, H, Hh, Wh)
quad4 = getQuad4(workSpace,W, H, Hh, Wh)
return workSpace, quad1, quad2, quad3, quad4
问题在于 Python 与任何其他编程语言一样具有可变范围。
这意味着根据您放置变量的位置,它可能只能在该范围内访问,在这种情况下,您的函数 getWorkSpace()
创建它。
为了让其他人都能访问它,您必须执行以下两项操作之一。
要么创建一个全局变量,就像这样:
import pyautogui
import time
import finder
workspace = None
def areaSetup():
global workspace
...
def getWorkSpace(browTopLeft, browBotRight):
global workspace
...
workSpace = x1, y1, x2, y2
def getWaHWorkSpace(workSpace):
global workspace
...
或者直接使用函数中的 returned 值。
workspace = getWorkSpace('img/dimen/loginDimTop.png' , 'img/dimen/loginDimBot.png')
因为 getWorkSpace()
确实 return 工作区正如您所期望的那样,因为您已经完成 return workSpace
,问题是您没有将它存储在任何地方.
这是您的两个选择,要么处理 return 值,要么按预期使用 getWorkSpace
函数。或者创建一个全局变量
我这里有一个 Python 脚本,用于确定作品的尺寸 space,然后确定自动化脚本应在何处单击或输入数据。
我 运行 遇到了一个问题,变量在一个函数中创建,但在另一个函数中无法访问。我返回了我想通过脚本继续使用的变量,但它给我一个错误,说它还没有被定义。
到目前为止,这是我的代码:
import pyautogui
import time
import finder
def areaSetup():
getWorkSpace('img/dimen/loginDimTop.png' , 'img/dimen/loginDimBot.png')
getWaHWorkSpace(workSpace)
getQuad1(workSpace,W, H, Hh, Wh)
getQuad2(workSpace,W, H, Hh, Wh)
getQuad3(workSpace,W, H, Hh, Wh)
getQuad4(workSpace,W, H, Hh, Wh)
return workSpace, quad1, quad2, quad3, quad4
def getWorkSpace(browTopLeft, browBotRight):
top = pyautogui.locateOnScreen( browTopLeft , grayscale=True)
print (top)
bottom = pyautogui.locateOnScreen( browBotRight , grayscale=True)
print (bottom)
x1, y1, h1, w1 = top
x2, y2, h2, w2 = bottom
x2 = x2+w2
y2 = y2+h2
print ("initial print" , x1, y1, x2, y2)
workSpace = x1, y1, x2, y2
print ("Workspace" , workSpace)
return workSpace
def getWaHWorkSpace(workSpace):
x1, y1, x2, y2 = workSpace #break it into four parts again
W = x2 - x1 #get the height
H = y2 - y1 #get the width
Hh = 0.5 * H #get mid point of height
Wh = 0.5 * W #get mid point of width
print ("W and H" , W, H, Hh, Wh)
return W, H, Hh, Wh
我的追溯如下:
(14, 40, 42, 47)
(694, 774, 342, 44)
initial print 14 40 738 1116
Workspace (14, 40, 738, 1116)
Traceback (most recent call last):
File "loginPage_001.py", line 35, in <module>
areaDimensions.areaSetup()
File "/home/tvorac/python/testBot/areaDimensions.py", line 7, in areaSetup
getWaHWorkSpace(workSpace)
NameError: name 'workSpace' is not defined
我很确定我忽略了一些简单的事情,并将继续查看 Python 文档,看看我是否能发现我做错了什么。
感谢您抽出宝贵时间来讨论这个问题!
我发现了我的错误!
当我在函数 areaSetup() 中调用它们时,我没有声明变量来自这些函数
这是我所做的:
def areaSetup():
workSpace = getWorkSpace ('img/dimen/loginDimTop.png' , 'img/dimen/loginDimBot.png')
W, H, Hh, Wh = getWaHWorkSpace(workSpace)
quad1 = getQuad1(workSpace,W, H, Hh, Wh)
quad2 = getQuad2(workSpace,W, H, Hh, Wh)
quad3 = getQuad3(workSpace,W, H, Hh, Wh)
quad4 = getQuad4(workSpace,W, H, Hh, Wh)
return workSpace, quad1, quad2, quad3, quad4
问题在于 Python 与任何其他编程语言一样具有可变范围。
这意味着根据您放置变量的位置,它可能只能在该范围内访问,在这种情况下,您的函数 getWorkSpace()
创建它。
为了让其他人都能访问它,您必须执行以下两项操作之一。
要么创建一个全局变量,就像这样:
import pyautogui
import time
import finder
workspace = None
def areaSetup():
global workspace
...
def getWorkSpace(browTopLeft, browBotRight):
global workspace
...
workSpace = x1, y1, x2, y2
def getWaHWorkSpace(workSpace):
global workspace
...
或者直接使用函数中的 returned 值。
workspace = getWorkSpace('img/dimen/loginDimTop.png' , 'img/dimen/loginDimBot.png')
因为 getWorkSpace()
确实 return 工作区正如您所期望的那样,因为您已经完成 return workSpace
,问题是您没有将它存储在任何地方.
这是您的两个选择,要么处理 return 值,要么按预期使用 getWorkSpace
函数。或者创建一个全局变量