我在Windows上有一个Python 3.6.4程序,它使用配置文件config.py来定义全局变量,以及执行其他操作的main.py脚本。我的config.py包含一个名为“variable”的字符串,其值为“value”:
# config.py
global variable
variable = "value"
如果我导入main.py中的所有变量并尝试打印(变量),它可以正常工作。但是,如果我尝试:变量AFTERWARDS,那么它在第一次打印(变量)时失败。对于长代码,很抱歉,我尝试用较小的代码片段重现问题并且工作正常,这让我很困惑:
# main.py
import argparse, logging, sys
from config import *
def main():
parser = argparse.ArgumentParser()
parser.add_argument('-v',
'--verbose',
action='store_true',
help="Rapporter davantage d'information.")
parser.add_argument('-l',
'--journal',
action='store',
default=None,
help="Spécifier le nom du journal.")
parser.add_argument('--csv',
action="store_true",
help="Exporter les résultats vers un fichier de sortie CSV.")
args = parser.parse_args()
# Configuration du journal
log_frmt = "%(asctime)s[%(levelname)s] %(message)s"
date_frmt = "%Y-%m-%d %H:%M:%S "
if args.verbose:
log_lvl = logging.DEBUG
else:
log_lvl = logging.INFO
logging.basicConfig(filename=args.journal,
format=log_frmt,
datefmt=date_frmt,
level=log_lvl)
logging.info(f"Journal initié : {args.journal}")
if args.csv:
print(variable)
sys.exit()
#try:
#print(variable)
#variable
#logging.debug(f"variable = {variable}")
#sys.exit()
#except NameError:
#variable = None
#logging.warning("variable non-défini, initialisé à None")
#sys.exit()
if __name__ == '__main__':
main()
输出结果为:
$ python main.py --csv
2018-03-14 16:44:20 [INFO] Journal initié : None
value
......这是你所期望的。但是如果我取消注释最后一部分,那么在sys.exit()之后:
...
logging.info(f"Journal initié : {args.journal}")
if args.csv:
print(variable)
sys.exit()
try:
print(variable)
variable
logging.debug(f"variable = {variable}")
sys.exit()
except NameError:
variable = None
logging.warning("variable non-défini, initialisé à None")
sys.exit()
if __name__ == '__main__':
main()
...它在第一次打印(变量)时失败:
$ python main.py --csv
2018-03-14 16:55:58 [INFO] Journal initié : None
Traceback (most recent call last):
File "main.py", line 52, in <module>
main()
File "main.py", line 38, in main
print(variable)
UnboundLocalError: local variable 'variable' referenced before assignment
可能导致这种情况的原因是什么?没有其他改变,我保存我的脚本,重新加载python(我从git bash运行它,而不是从没有重新加载模块的python控制台)...我还能尝试什么?
我尝试使用更简单的脚本重现这一点,没有记录和没有argparse,但可以重现它。
谢谢。