当前位置: 首页 > 面试题库 >

为什么在尝试调用函数时出现NameError?

赵嘉纳
2023-03-14
问题内容

这是我的代码:

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?


问题答案:

除非已定义函数,否则无法调用它。将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()

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



 类似资料:
  • 问题内容: JDBC有问题。 我有以下代码: 我收到以下错误: 我的连接字符串是 jdbc:oracle:oci:@..... Oracle版本为11g。 从错误消息看来,似乎缺少了一些东西,但是: 当我从同一个blob列(带有blob.getBytes)读取时,一切正常。 即时客户端的DLL位于库路径中(正确)。 这是我的类路径中Oracle JDBC JAR的清单: 问题答案: 看起来即使驱动

  • "mediaPlayer=MediaPlayer.create(上下文, R.raw.coast"行抛出以下异常: Java语言lang.NullPointerException:尝试调用虚拟方法“android”。所容纳之物资源android。所容纳之物上下文在空对象引用上的getResources() 我已经将这段代码从一个独立的应用程序中转移到另一个应用程序的这个类中。现在它不起作用了,我不

  • 现在我的问题是实际的SOAP调用并不成功。我使用SOAPUI来尝试SOAP调用,但只是为了能够查询WSDL。我得到以下错误:-

  • 我试图编写一个函数,使用闭包验证给定的集合。该函数获取集合的所有权,对内容进行迭代,如果没有找到无效的项,则返回集合的所有权。这就是为什么它可以这样使用(而不需要为创建一个temp):

  • 我正在使用MQ Java PCF API从MQ安装中检索信息。类PCFMessageAgent有几个构造函数。有一个接受主机、端口和通道名称。我展示了文档的摘录。 为什么我会得到这个错误?我怎么解决这个。 我在错误日志中找到了这个。任何帮助都将不胜感激。

  • 我已经从各种“git”镜像中检查出了当前的树尖,如这里的入门页面所述:http://llvm.org/docs/GettingStarted.html 然后,我按照指令使用C的生成的使文件,像这样:c做-G'Unix Makefile' /Path/To/LLVM-Repository 此配置失败,出现以下错误-发生了什么问题? CMake错误位于tools/clang/CMakeLists。tx