为什么未定义此变量?使用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
检查缩进。
def foo():
return "hi"
def bar():
print(foo())
bar()
您具有用于缩进而非空格的制表符
这是正确的标识
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 }])
结果是使用exec时是Python中的错误:https://bugs.python.org/issue4831