无法将execfile()变量设为全局而非局部

1 投票
1 回答
587 浏览
提问于 2025-05-01 02:15

我有一个函数:

#This function loads the tokens for the specified account. If the tokens are not found, it quits the script.
def selectAccountTokens():

global OAUTH_TOKEN
global OAUTH_SECRET
global CONSUMER_KEY
global CONSUMER_SECRET

if args.account == 'acc1':
    execfile('tokens/acc1.py')
    print "Account tokens were successfully loaded."

elif args.account == 'acc2':
    execfile('tokens/acc2.py')
    print "Account tokens were successfully loaded."

elif args.account == 'acc3':
    execfile('tokens/acc3.py')
    print "Account tokens were successfully loaded."

elif args.account == 'acc4':
    execfile('tokens/acc4.py')
    print "Account tokens were successfully loaded."

else:
    print "Account tokens were not found, or the argument is invalid."
    quit()

当我运行这个函数时,如果不把变量 OAUTH_TOKEN, OAUTH_SECRET, CONSUMER_KEY, CONSUMER_SECRET 声明为全局变量,它就会出错。

我把这些变量改成全局变量后,运行 print OAUTH_TOKEN 时,结果还是没有任何输出。

我知道不应该使用全局变量,但我找不到不使用全局变量的方法。尽管如此,这个函数还是没有给这些变量赋值。

文件 tokens/acc1.py 的内容是:

OAUTH_TOKEN = "gaergbaerygh345heb5rstdhb"
OAUTH_SECRET = "gm8934hg9ehrsndz9upnv09w5eng9utrh"
CONSUMER_KEY = "mdfiobnf9xdunb9438gj28-3qjejgrseg"
CONSUMER_SECRET = "esgmiofdpnpirenag8934qn-ewafwefdvzsvdfbf"
暂无标签

1 个回答

2

global 这个关键词并不会影响 execfile 执行时的环境。

如果你明确地传递 globals(),就能解决你的问题:

execfile('tokens/acc1.py', globals())

顺便提一下,如果你使用 字符串格式化操作符 % 或者 str.format,可以简化 if .. elif ... elif .. 的写法:

if args in ('acc1', 'acc2', 'acc3', 'acc4'):
    execfile('tokens/%s.py' % args)
    print "Account tokens were successfully loaded."
else:
    print "Account tokens were not found, or the argument is invalid."
    quit()

撰写回答