为了账号安全,请及时绑定邮箱和手机立即绑定

寻求有关如何防止Python中无休止的“ NameErrors”的一般建议

寻求有关如何防止Python中无休止的“ NameErrors”的一般建议

墨色风雨 2021-03-15 17:14:56
我有一个问题,可以肯定,每个中级Python程序员都会在某个时候想到这个问题:也就是说,如何解决/防止/避免/解决那些如此持久且同样令人沮丧的问题NameErrors。我不是在谈论实际错误(例如拼写错误等),而是一个奇怪的问题,基本上说没有定义全局名称,而实际上却是在更下方定义。无论出于什么原因,Python在这一领域似乎都非常需要:每个绝对绝对肯定的变量都必须在引用它的任何事物的上方和上方定义(或看起来)。例如:condition = Trueif condition == True:    doStuff()def doStuff():    it_worked = True使Python给我这个:Traceback (most recent call last):  File "C:\Users\Owner\Desktop\Python projects\test7.py", line 4, in <module>    doStuff()NameError: name 'doStuff' is not defined但是,这个名称是WAS定义的,只是Python显然不需要它。因此,对于一个俗气的小功能来说,doStuff()这没什么大不了的;只需将功能剪切并粘贴到满足系统特定顺序要求的区域即可。但是,当您尝试实际使用它设计某些东西时,它实际上使组织代码变得不可能(我不得不“取消组织”大量代码以适应此错误)。我用其他任何一种语言都从未遇到过这个问题,所以它似乎特定于Python。但是无论如何,我已经在文档中对此进行了研究,却没有找到任何解决方案(甚至是潜在的解决方案)导致可能的解决方案),因此,我感谢任何提示,技巧,解决方法或其他建议。它可能很简单,例如学习特定的组织结构(例如某种“ Python式”和非常有战略性的方法来解决错误),或者只是使用大量import语句,这样就可以更轻松地在特定组织中组织这些语句。令系统无法正常运行的命令...
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

避免在顶层编写代码(声明以外的代码),main()在要直接执行的文件中使用函数:


def main():

    condition = True

    if condition:

        do_stuff()


def do_stuff():

    it_worked = True


if __name__ == '__main__':

    main()

这样,你只需要确保的if..main结构如下main()功能(例如,将其放置在文件的结尾),其余的可以按任何顺序排列。在执行时间之前,文件将被完全解析(因此可以解析模块中定义的所有名称)main()。


查看完整回答
反对 回复 2021-03-27
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

根据经验:在大多数情况下,请先定义所有功能,然后再在代码中使用它们。


查看完整回答
反对 回复 2021-03-27
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

在Python中,定义函数是在运行时发生的行为,而不是在编译时发生的行为。在该操作期间,将在编译时编译的代码分配给该函数的名称。然后,该名称是当前作用域中的变量。以后可以覆盖它,因为其他任何变量都可以:


def f():

  print 42


f()  # will print 42


def f():

  print 23


f()  # will print 23

您甚至可以将其他值之类的函数分配给变量:


def f():

  print 42

g = 23

f()  # will print 42

g    # will print 23

f, g = g, f

f    # will print 23

g()  # will print 42

当您说您没有用其他语言遇到此问题时,这是因为您所指的其他语言没有被解释为脚本。bash例如,尝试类似的事情,您会发现其他语言也可以使用Python。


查看完整回答
反对 回复 2021-03-27
  • 3 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信