Почему я получаю NameError, когда пытаюсь вызвать мою функцию? - PullRequest
0 голосов
/ 08 мая 2018

Это мой код:

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?

1 Ответ

0 голосов
/ 08 мая 2018

Вы не можете вызвать функцию, если вы уже не определили ее. Переместите блок 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, это не проблема, поскольку def createDirs выполняется раньше, чем doStuff() в строке 12.

...