【问题标题】:Why am I getting a NameError when I try to call my function?当我尝试调用我的函数时,为什么会收到 NameError?
【发布时间】:2022-01-26 18:30:13
【问题描述】:

这是我的代码:

import os

if os.path.exists(r'C:\Genisis_AI'):
    print("Main File path exists! Continuing with startup")
else:
    createDirs()

def createDirs():
    os.makedirs(r'C:\Genisis_AI\memories')

当我执行这个时,它会抛出一个错误:

File "foo.py", line 6, in <module>
    createDirs()
NameError: name 'createDirs' is not defined

我确定不是拼写错误,也没有拼错函数名,为什么会出现 NameError?

【问题讨论】:

标签: python function nameerror


【解决方案1】:

你不能调用一个函数,除非你已经定义了它。将 def createDirs(): 块移动到文件顶部,导入下方。

某些语言允许您在定义函数之前使用它们。例如,javascript 将此称为“提升”。但 Python 不是其中一种语言。


请注意,可以在比创建函数的行更高的行中引用函数,只要按时间顺序定义出现在使用之前。例如,这是可以接受的:

import os

def doStuff():
    if os.path.exists(r'C:\Genisis_AI'):
        print("Main File path exists! Continuing with startup")
    else:
        createDirs()

def createDirs():
    os.makedirs(r'C:\Genisis_AI\memories')

doStuff()

即使在第 7 行调用了 createDirs() 并且在第 9 行定义了它,但这不是问题,因为 def createDirsdoStuff() 在第 12 行执行之前执行。

【讨论】:

  • 谢谢你,我犯了一个愚蠢的错误,我以前从来没有遇到过这个问题(至少我认为我经常这样做)并且从来没有遇到过这个问题,谢谢凯文的帮助。虽然看到你对 javascript(我使用的一种语言以及 python 编程的语言)的评论我只是把它弄混了。
  • @NaruS 如果此答案解决了您的问题,请考虑投票并接受它为正确的。 stackoverflow.com/help/someone-answers
  • 我不得不等到时间限制,但是我确实赞成。事实上,我一看到就投了赞成票,(发布问题后必须经过 7 分钟才能接受正确的答案,这就是接受延迟的原因)
  • @NaruS 请注意,在全局调用函数(如在原始代码中)与从另一个函数调用函数之间存在巨大差异。你可能已经做过很多次了,没有问题。
  • @Code-Apprentice 感谢您的注意,这是我以前做过并且熟悉并且往往没有问题的事情,这也不是我的初衷(正如 Aaron 所说,我故意尝试在调用函数后定义函数,因为您可以使用 javascript [我也编写脚本的语言] 并且没有意识到 python 的工作方式不同)无论哪种方式,感谢您的说明,我会牢记这一点。
猜你喜欢
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 2019-11-16
  • 1970-01-01
相关资源
最近更新 更多