我正在编写许多小python脚本并保存在一个目录中,我用不同的脚本调用它们
下面是脚本,它正在调用已保存在另一个导演acc_repo中的函数:
from acc_repo import col
import logging
import getpass
col.col()
dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)
File "ucs_qa.py", line 21, in <module>
dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)
NameError: name 'OKGREEN' is not defined
保存在acc_repo目录中的功能
def col ():
global HEADER
global OKBLUE
global OKGREEN
global WARNING
global FAIL
global ENDC
global BOLD
global UNDERLINE
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
如何修复错误?在处理许多小python脚本方面,我是在正确的轨道上吗?请提供建议并帮助解决问题
答案 0 :(得分:0)
尝试
col.OKGREEN
就像函数一样,不同文件中的变量需要知道它们所在的位置。这允许开发人员创建相同的命名变量,而不会打扰他们导入的库。
答案 1 :(得分:0)
您的函数col.col()声明了全局变量,但它们仍然在声明它们的模块的范围内。因此,在调用col.col()
之后,您可以通过使用col
模块限定名称来访问声明的变量。例如,您可以使用OKGREEN
col.OKGREEN
答案 2 :(得分:0)
(更新答案) 试试这个:
from acc_repo import col
import logging
import getpass
col.col()
# import the OKGREEN.. etc after col()
from acc_repo.col import *
dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)
调用col()后,全局变量初始化。
但这更像是一种快速的解决方法,可以使您的代码正常工作。我猜你试图通过调用col()
使main.py中的全局变量“全局”,但它们实际上只是col.py范围内的全局变量。因此,在from acc_repo.col import *
被调用后仍然需要col()
。
要实现您的目标,请将col.py修改为(如@ Maurice的回答):
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
然后删除行col.col()
,并保持另一个原样。
答案 3 :(得分:0)
根本不要使用全局变量!
acc_repo.py:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
main.py:
from acc_repo import *
import logging
import getpass
dc = raw_input(OKGREEN + "Choose DataCenter:" + ENDC)
print(dc)