加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:22:23 所属栏目:Python 来源:网络整理
导读:我有一个问题,我确信在某些时候,每个中级 Python程序员都会想到这个问题:也就是说,如何修复/阻止/避免/解决那些永远存在且同样令人沮丧的NameErrors.我不是在谈论实际错误(比如拼写错误等),而是一个基本上没有定义全局名称的奇怪问题,而实际上它是进一步定
我有一个问题,我确信在某些时候,每个中级 Python程序员都会想到这个问题:也就是说,如何修复/阻止/避免/解决那些永远存在且同样令人沮丧的NameErrors.我不是在谈论实际错误(比如拼写错误等),而是一个基本上没有定义全局名称的奇怪问题,而实际上它是进一步定义的.无论出于何种原因,Python似乎在这个领域非常需要:每个变量绝对必须要在上面定义并且只在任何引用它的东西之上(或者看起来如此).

例如:

condition = True

if condition == True:
    doStuff()

def doStuff():
    it_worked = True

让Python给我这个:

Traceback (most recent call last):
  File "C:UsersOwnerDesktopPython projectstest7.py",line 4,in <module>
    doStuff()
NameError: name 'doStuff' is not defined

但是,WAS定义了这个名称,而不是Python显然想要它的地方.所以对于像doStuff()这样俗气的小函数来说,这没什么大不了的.只需将功能剪切并粘贴到满足系统对特定订单要求的区域即可.但是当你尝试用它来实际设计一些东西时,它几乎不可能组织代码(我必须“解组”大量的代码来容纳这个bug).我从来没有遇到过我写过的任何其他语言的问题,所以它似乎特定于Python …但无论如何我在文档中研究了这个并且没有找到任何解决方案(甚至是潜在的导致可能的解决方案)所以我会感谢任何提示,技巧,变通方法或其他建议.

它可能就像学习特定的组织结构一样简单(比如某种“Pythonic”和解决bug的非常具有战略性的方法),或者只是使用大量的import语句,因此组织它们会更容易.特定的顺序将阻止系统起作用……

解决方法

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

def main():
    condition = True
    if condition:
        do_stuff()

def do_stuff():
    it_worked = True

if __name__ == '__main__':
    main()

这样你只需要确保the if..main construct跟随main()函数(例如将它放在文件的末尾),其余的可以是任何顺序.在执行main()时,将完全解析文件(因此可以解析模块中定义的所有名称).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读