是什么导致局部变量引用错误?

2024-05-04 18:41:22 发布

您现在位置:Python中文网/ 问答频道 /正文

  • 还有:有人能告诉我为什么它不接“网站”吗?

我想弄清楚是什么导致了这个错误:

第60行: 是什么导致了这个错误???只出现在第一行:

UnboundLocalError: local variable 'name' referenced before assignment

代码:

^{pr2}$

示例数据(合成数据):

^{3}$

Download ex data

Last login: Tue Jul  2 15:33:31 on ttys000
/var/folders/jv/9_sy0bn10mbdft1bk9t14qz40000gn/T/Cleanup\ At\ Startup/ieca_first_col-394486416.142.py.command ; exit;
Samuel-Finegolds-MacBook-Pro:~ samuelfinegold$ /var/folders/jv/9_sy0bn10mbdft1bk9t14qz40000gn/T/Cleanup\ At\ Startup/ieca_first_col-394486416.142.py.command ; exit;



 range 4
split area nmdeg
 CEP
['Lannister G. Cersei M.A.T.']
({'additionaltext': '',
  'bio': '',
  'category': ' CEP',
  'certifications': [],
  'company': '',
  'counselingoptions': [],
  'counselingtype': [],
  'datasource': {'additionaltext': '',
                 'linktext': '',
                 'linkurl': '',
                 'logourl': ''},
  'degrees': ['M.A.T.'],
  'description': '',
  'email': {'emailtype': [], 'value': 'cersei@got.com'},
  'facebook': '',
  'languages': 'english',
  'linkedin': '',
  'linktext': '',
  'linkurl': '',
  'location': {'address': '',
               'city': '',
               'country': 'united states',
               'geo': {'lat': '', 'lng': ''},
               'loc_name': '',
               'locationtype': '',
               'state': '',
               'zip': ''},
  'logourl': '',
  'name': {'first_name': u'Lannister',
           'last_name': u'Cersei',
           'middle_name': u'G.',
           'title': u''},
  'phone': {'phonetype': [], 'value': '1112223333'},
  'photo': '',
  'price': {'costrange': [], 'costtype': []},
  'twitter': '',
  'website': ''},)
({'additionaltext': '',
  'bio': '',
  'category': [],
  'certifications': [],
  'company': '',
  'counselingoptions': [],
  'counselingtype': [],
  'datasource': {'additionaltext': '',
                 'linktext': '',
                 'linkurl': '',
                 'logourl': ''},
  'degrees': ['Ed.M.'],
  'description': '',
  'email': {'emailtype': [], 'value': ''},
  'facebook': '',
  'languages': 'english',
  'linkedin': '',
  'linktext': '',
  'linkurl': '',
  'location': {'address': '',
               'city': '',
               'country': 'united states',
               'geo': {'lat': '', 'lng': ''},
               'loc_name': '',
               'locationtype': '',
               'state': '',
               'zip': ''},
  'logourl': '',
  'name': {'first_name': u'Argle',
           'last_name': u'Bargle',
           'middle_name': u'D.',
           'title': u''},
  'phone': {'phonetype': [], 'value': ''},
  'photo': '',
  'price': {'costrange': [], 'costtype': []},
  'twitter': '',
  'website': ''},)
({'additionaltext': '',
  'bio': '',
  'category': [],
  'certifications': [],
  'company': '',
  'counselingoptions': [],
  'counselingtype': [],
  'datasource': {'additionaltext': '',
                 'linktext': '',
                 'linkurl': '',
                 'logourl': ''},
  'degrees': ['Ed.M.'],
  'description': '',
  'email': {'emailtype': [], 'value': 'dman123@gmail.com'},
  'facebook': '',
  'languages': 'english',
  'linkedin': '',
  'linktext': '',
  'linkurl': '',
  'location': {'address': '',
               'city': '',
               'country': 'united states',
               'geo': {'lat': '', 'lng': ''},
               'loc_name': '',
               'locationtype': '',
               'state': '',
               'zip': ''},
  'logourl': '',
  'name': {'first_name': u'Sam',
           'last_name': u'Man',
           'middle_name': u'D.',
           'title': u''},
  'phone': {'phonetype': [], 'value': '0000001111'},
  'photo': '',
  'price': {'costrange': [], 'costtype': []},
  'twitter': '',
  'website': ''},)
({'additionaltext': '',
  'bio': '',
  'category': [],
  'certifications': [],
  'company': '',
  'counselingoptions': [],
  'counselingtype': [],
  'datasource': {'additionaltext': '',
                 'linktext': '',
                 'linkurl': '',
                 'logourl': ''},
  'degrees': ['M.S.'],
  'description': '',
  'email': {'emailtype': [], 'value': ''},
  'facebook': '',
  'languages': 'english',
  'linkedin': '',
  'linktext': '',
  'linkurl': '',
  'location': {'address': '',
               'city': '',
               'country': 'united states',
               'geo': {'lat': '', 'lng': ''},
               'loc_name': '',
               'locationtype': '',
               'state': '',
               'zip': ''},
  'logourl': '',
  'name': {'first_name': u'D',
           'last_name': u'Bamf',
           'middle_name': u'G',
           'title': u''},
  'phone': {'phonetype': [], 'value': ''},
  'photo': '',
  'price': {'costrange': [], 'costtype': []},
  'twitter': '',
  'website': ''},)
logout

[Process completed]

Tags: namevaluecompanybiofirstdegreescategorydatasource
2条回答

我想留下评论,但我想这应该算是一个回答。你似乎喜欢编程(或者至少是认真对待它),所以请积极接受我的回答:不是作为另一种批评,而是作为一种建议,在将来如何避免类似的错误/问题。在

以下是我在阅读了您的代码后想到的几点:

1) 添加入口点

代码是混乱的,这使得你很难找到并遵循你的主要思路(程序逻辑)。既然你不仅仅是原型或实验,而是在编写一个正常运行的程序,那么你应该真正地添加一个入口点。在python中,首先用所有条目和元素(主要是导入、常量和函数)定义模块,然后在模块底部设置入口点:if __name__ == '__main__':。在

2) 将代码分解为多个函数

这个程序不是那么大,但是因为你试图做太多(非常快-n-dirty)并且只使用几行代码,这就变得很危险了。你的代码增长非常快,并暴露出这样的错误。请慢慢来,学习如何将代码分解为函数,这些函数是每个模块的基本构建块。尝试在模块中定义许多小的自洽函数,并从程序的主要部分调用它们。如果您设法给它们起一个正确的名称,那么您的代码将非常可读,尤其是从__main__部分开始。在

将每个函数视为一个小程序(分而治之)。使每个函数的行数保持较小(<;=20),并压缩参数数(<;=5-7)。它有许多优点:

  • 您可以单独测试每个函数的代码,并通过使用调用形式__main__、doctest或unittests来确保它正常工作。这样,即使在不应用复杂的调试技术之前,也可以完全控制程序
  • 每个函数都是一个闭包,并且声明了一个有界于局部范围的变量。这有助于避免可能导致“副作用”的全局变量的复杂性。在
  • 其他模块可以导入函数。这样你就有了更好的代码组织和更高的可重用性。在

3) 不要在没有运行的情况下编写太多代码

在编写程序时,缓慢地进行可以让你的想法保持不变的概述。即使代码最终会比您希望的更丑,对代码的任何增量更改都应该是可跟踪的(您知道/观察每一步添加了多少代码)。您还可以开始在本地使用版本控制(仅限于您自己),这将允许您通过保持提交的原子性和自包含性来缓慢地进行。在

4) 印刷和模具

如果你仍然觉得你付出了太多,或者写了太多代码却没有运行它,那么你最终会陷入与现在类似的境地。另一个技巧可以是将exit()调用放在新编写的中断代码的中间或之前(通过检查异常信息的行号)。在大多数情况下,尝试打印出变量并检查它们的值是否与预期值相似有助于找到问题。否则,只需对程序的一部分进行注释,以便后退几步(删减它,直到它变得很小,任何“开”的东西都能起作用)

5) 循环复杂度

避免太多嵌套循环和条件构造。每个函数的嵌套块不要超过2-3个。这是重要的事情。使用pylint和PEP8等工具检查代码的质量。你会惊讶于这些工具能够找到多少关于代码的抱怨,这些代码看起来很不错。E、 每行代码有80个字符的限制是有很大的动机的。这确实可以防止编写过多的挂起和嵌套代码。理想情况下,代码总是紧凑的:每个函数都不太宽,也不太高。在

6) 避免

最后,尽量避免

  • 将变量重新分配给自己,特别是如果您正在另外更改类型:^{cd5>}
  • 在嵌套块和表达式中定义可能发生或可能不会发生的“挂起”变量
  • 对全局变量的依赖性(完全通过定义函数!)以及太多的交叉依赖。除非您编写递归算法,否则您应该完全可以使用自顶向下的方法。依赖于经过严重考验、不确定的结果。
  • 尊重缩进-始终替换选项卡!如果不这样做,您将不会在python中实现这一点(set ts=4 | set sw=4 | set et)

如果你写了一行代码,你花了太长时间才想,那么考虑改正它。如果你写了一个你后来不明白的函数,考虑扔掉它。如果你做得好 你会发现一个你不明白的错误,考虑睡觉。

聚苯乙烯

别忘了抽名人

>>> import this

希望其中的一些要点有用。

德国劳埃德!

您使用的是一个局部变量name这里:

name = HumanName(name)

您确实在该点之前设置name,但前提是某些条件匹配。当这些条件不匹配时,name永远不会分配给,并且会引发异常。在

{cd4>中的第一个分支是:

^{pr2}$

如果deg == word从不匹配,则name也从不设置。在

您的函数也不会返回任何东西,因此a = parse_ieca_gc(s)只会将None分配给a。您需要使用return关键字来设置函数的返回值。在

最后但并非最不重要的是,您只将第一行从CSV文件传递给函数,并且第一行有与之关联的no网站:

Diane Grant Albrecht M.S.           

相关问题 更多 >