Python область видимости переменной дает неопределенную для определенной переменной - PullRequest
0 голосов
/ 03 мая 2020

Почему эта переменная не определена? Использование global исправляет это (нужно также установить global serviceFile), но я подумал, что вам нужно только указать global, если вы изменяете глобальные переменные.

  File "./test_menu.py", line 18, in generateTemplateList
    serviceFilePath = templateDirectory + '/' + directory + '/' + serviceFile
NameError: name 'templateDirectory' is not defined
#!/usr/bin/env python3

import os

# Constants
templateDirectory = './.templates'
serviceFile = 'service.yml'

menu = []
templateDirectoryFolders = next(os.walk(templateDirectory))[1]

def generateTemplateList(templateDirectoryFolders):
  templateListDirectories = []
  for directory in templateDirectoryFolders:
    serviceFilePath = templateDirectory + '/' + directory + '/' + serviceFile
    if os.path.exists(serviceFilePath):
      templateListDirectories.append(directory)

  return templateListDirectories

templatesList = generateTemplateList(templateDirectoryFolders)
for directory in templatesList:
  menu.append([directory, { "ticked": False }])

Я получаю аналогичные ошибки с функциями, например:

def foo():
  return "hi"

def bar():
  print(foo())

bar()
  File "./test.py", line 6, in bar
    print(foo())
NameError: name 'foo' is not defined

Ответы [ 3 ]

0 голосов
/ 03 мая 2020

это правильная идентификация

import os

# Constants
templateDirectory = './.templates'
serviceFile = 'service.yml'

menu = []
templateDirectoryFolders = next(os.walk(templateDirectory))[1]

def generateTemplateList(templateDirectoryFolders):
    templateListDirectories = []
    for directory in templateDirectoryFolders:
        serviceFilePath = templateDirectory + '/' + directory + '/' + serviceFile
        if os.path.exists(serviceFilePath):
            templateListDirectories.append(directory)

    return templateListDirectories

templatesList = generateTemplateList(templateDirectoryFolders)
for directory in templatesList:
    menu.append([directory, { "ticked": False }])

0 голосов
/ 04 мая 2020

Оказывается, это ошибка в Python при использовании exe c: https://bugs.python.org/issue4831

0 голосов
/ 03 мая 2020

проверьте отступ.

def foo():
    return "hi"

def bar():
    print(foo())

bar()

у вас есть вкладка для отступа, а не пробела

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...