我被这件事缠住了。我在一个视图中使用了一个名为modifier_dico的函数,该函数位于名为函数.py. 第一行修饰符_dico如下:
def modifier_dico(tweet,nom_dico, dico_cat):
exec('dico= {}')
我的看法是:
^{pr2}$当我试图访问这个视图时,我在Django的调试页面上得到name 'dico' is not defined
。在
但是当我看the local vars of modifier_dico in the traceback时,我有一个变量dico,其值为{}
看起来exec()
没有像我预期的那样工作。在
您没有指定要在哪个命名空间中设置名称,因此名称是在} function documentation :
fonctions.modifier_dico()
函数的范围内设置的,而不是classer_tweet()
。从^{必须传入另一个字典才能将名称设置为第二个参数:
您不能使用
exec()
来设置函数中的局部变量,除非在给定函数中该名称已被分配给。这是一个硬限制,因为优化了如何访问函数中的本地命名空间。来自同一文档:从链接的^{} function documentation :
因此,不能使用
exec()
在视图函数中设置其他局部变量。你真的应该对任意名称空间使用字典。在您可能仍然可以看到
^{pr2}$locals()
字典中的更改,但由于函数在一个方向上返回实际局部变量的反射,因此该局部函数实际上在函数本身中不可用。换句话说,函数的实际局部变量被复制到locals()
返回的字典中,对该字典的添加不会被复制回:相关问题 更多 >
编程相关推荐