Python vars()全局名称错误

Python vars()全局名称错误,第1张

概述我在理解以下功能出了什么问题时遇到了一些麻烦: def ness(): pie='yum' vars()[pie]=4 print vars()[pie] print yum 所以,当我运行时,我得到这个结果: >>> ness()4Traceback (most recent call last): File "<stdin>", line 1, in <module> Fi 我在理解以下功能出了什么问题时遇到了一些麻烦:

def ness(): pIE='yum' vars()[pIE]=4 print vars()[pIE] print yum

所以,当我运行时,我得到这个结果:

>>> ness()4Traceback (most recent call last):  file "<stdin>",line 1,in <module>  file "<stdin>",line 5,in nessnameError: global name 'yum' is not defined

如果我不把它写成一个函数,只需在命令行中输入一行就可以正常工作,就像这样:

>>> pIE='yum'>>> vars()[pIE]=4>>> print vars()[pIE]4>>> print yum4>>>

编辑:
假设我想让事情比这更复杂,而不是将yum设置为值并打印该值,我定义了一些函数,并希望根据一些输入调用其中一个:

def ness(choo):    dic={}    dessert=()    dnum=[10,100]    desserts='pIE'    dic[dessert]=str(desserts[bisect(dnum,choo)])    vars()[dic[dessert]]()def p():    print 'ummmm ummm'def i():    print 'hooo aaaaa'def e():    print 'woooo'

因此,当我打电话给我时,我得到一个关键错误

>>> ness(3)Traceback (most recent call last):  file "<stdin>",line 7,in nessKeyError: 'p'

现在我知道我可以用一些elif语句做这样的事情,但是我想知道这是否也会起作用,如果像这样使用bisect会比使用elifs更有效(比如我需要检查1000个值的值) .

非常感谢您的帮助.

解决方法 有办法用exec来做

>>> def ness():...  pIE='yum'...  exec pIE+"=4"...  print vars()[pIE]...  print yum...>>>>>> ness()44

但是,不要这样做,使用新的字典更好,更安全

>>> def ness():...  dic={}...  pIE='yum'...  dic[pIE]=4...  print dic[pIE]...  print dic['yum']...>>> ness()44>>>
总结

以上是内存溢出为你收集整理的Python vars()全局名称错误全部内容,希望文章能够帮你解决Python vars()全局名称错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1192342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存