将代码放入函数中时,出现“分配前引用的局部变量”

时间:2018-07-31 16:25:15

标签: python factoring

在尝试将其放入函数之前,我的代码可以正常工作。定义函数,缩进代码并调用函数后,我收到错误消息:

  

“分配前已引用局部变量'print'。

为什么我要更改的所有内容将其放入函数中时会弹出?我从不分配变量“打印”。请帮忙!
我屏蔽了令牌以访问要保护安全性的服务器。

<div class="combo-display">
  <div class="combo-item">
   israeli couscous salad
  </div>
  <div class="combo-item">
   vegetable egg fried rice
  </div>
  <div class="combo-item">
   vegetable egg fried rice1
  </div>
  <div class="combo-item">
   roasted salmon
  </div>
</div>

2 个答案:

答案 0 :(得分:0)

  

我从不分配变量'print'。

是的:

print:("No email found")

这是一个annotated assignment statement,它用类型print注释"No email found",但没有赋值。

带注释的赋值始终创建一个局部变量,即使您没有赋值也是如此。从文档中:

  

如果在函数作用域中标注了名称,则该名称在该作用域中是本地的。

如果您想知道,对于这种情况,空的带注释的分配很有用:

n: int
if spam:
    n = spam**2
else:
    n = -1

这是告诉Mypy之类的静态类型检查器以验证n最终持有int的唯一方法,无论您采取哪个if分支。

答案 1 :(得分:-1)

“我在代码的其他位置分配了parsed_json”

这就是问题所在。您必须将变量传递给代码,或者将其全局声明,但最好避免这种情况。您可以像这样进行简单的更改。

def printSet(parsed_json):
    for user in range (0,len(parsed_json['members'])-1):
       userDict=parsed_json['members'][user]
    #####do a bunch of stuff or whatever

printSet(parsed_json)

请注意,您需要对函数中使用的每个变量执行此操作

还有一些可以简化您的代码并帮助调试的东西将摆脱所有的try-excepts

keylist=["id", "real_name", ..... "last_name"] #not required, but helpful if you want to print "not found" type messages
for k in keylist:
    if k in userDict.keys():
        print('{}: {}'.format(k, userDict[k]))
    else:
        print('No {} found'.format(k))