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

我有一个问题,可以肯定,每个中级Python程序员都会在某个时候想到这个问题:也就是说,如何解决/防止/避免/解决那些如此持久且同样令人沮丧的问题NameErrors。我不是在谈论实际错误(例如拼写错误等),而是一个奇怪的问题,基本上说没有定义全局名称,而实际上却是在更下方定义。无论出于什么原因,Python在这一领域似乎都非常需要:每个绝对绝对肯定的变量都必须在引用它的任何事物的上方和上方定义(或看起来)。


例如:


condition = True


if 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语句,这样就可以更轻松地在特定组织中组织这些语句。令系统无法正常运行的命令...


墨色风雨
浏览 164回答 3
3回答

catspeake

避免在顶层编写代码(声明以外的代码),main()在要直接执行的文件中使用函数:def main():&nbsp; &nbsp; condition = True&nbsp; &nbsp; if condition:&nbsp; &nbsp; &nbsp; &nbsp; do_stuff()def do_stuff():&nbsp; &nbsp; it_worked = Trueif __name__ == '__main__':&nbsp; &nbsp; main()这样,你只需要确保的if..main结构如下main()功能(例如,将其放置在文件的结尾),其余的可以按任何顺序排列。在执行时间之前,文件将被完全解析(因此可以解析模块中定义的所有名称)main()。

泛舟湖上清波郎朗

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

鸿蒙传说

在Python中,定义函数是在运行时发生的行为,而不是在编译时发生的行为。在该操作期间,将在编译时编译的代码分配给该函数的名称。然后,该名称是当前作用域中的变量。以后可以覆盖它,因为其他任何变量都可以:def f():&nbsp; print 42f()&nbsp; # will print 42def f():&nbsp; print 23f()&nbsp; # will print 23您甚至可以将其他值之类的函数分配给变量:def f():&nbsp; print 42g = 23f()&nbsp; # will print 42g&nbsp; &nbsp; # will print 23f, g = g, ff&nbsp; &nbsp; # will print 23g()&nbsp; # will print 42当您说您没有用其他语言遇到此问题时,这是因为您所指的其他语言没有被解释为脚本。bash例如,尝试类似的事情,您会发现其他语言也可以使用Python。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python