У меня возникли проблемы с этим кодом. Хотя ошибки имен, по-видимому, распространены, я не смог найти решение, выполнив поиск. Вот код ...NameError ... глобально не определено
def fmp_sel():
with open ('MonPlotDb.csv', 'rU') as csvfile:
next(csvfile, None)
fmpList = csv.reader(csvfile, delimiter=',', dialect=csv.excel_tab)
for item in enumerate(fmpList):
print "[%d] %s" % (item)
while True:
try:
in_Sel = raw_input(('''Choose from list or 'q' to quit:'''))
if in_Sel == 'q':
print 'Quit?'
conf = raw_input('Really? (y or n)...')
if conf == 'y':
print 'Seeya!'
break
else:
continue
plotOrig = DataPlotLoc[int(in_Sel) + 1]
print 'You selected', plotOrig[1]
break
except (ValueError, IndexError):
print 'Error: Try again'
и отслеживающий ....
File "E:\FireRegDb\Rec_2012\dblist_outonly.py", line 28, in fmp_sel
plotOrig = DataPlotLoc[int(in_Sel) + 1]
NameError: global name 'DataPlotLoc' is not defined
Эта функция вызывается из основной(), но я не могу понять, почему «DataPlotLoc» является глобальное имя так как он находится внутри этой функции. В любом случае, я думаю, что мне не хватает строки, чтобы определить его, но как и где я не знаю. Мне бы очень хотелось помочь.
EDIT: Просто добавьте дополнительную информацию .. 'DataPlotLoc' был именем списка, когда он был вставлен в код, т.е. DataPlotLoc = [['a', 'b', 'c', ....]], и это сработало. Строка plotOrig = DataPlotLoc [int (in_Sel) + 1] относится к этому списку, но, очевидно, теперь он считывается csv.reader, поэтому теперь я не уверен, как назначить эту переменную. Я предполагал, что мне все еще нужно принять целое число после подтверждения того, вводит ли пользователь «q» или нет, а +1 - добавить к введенному числу, чтобы он выравнивался с правильным номером индекса для соответствующего элемента строки, выбранного из списка , Извините, если это немного запутанно, но я немного смутил себя ...
+1. Часть «глобального имени» ошибки может быть немного запутанной для новых пользователей, но простой способ подумать об этом: если вы не определяете 'DataPlotLoc' локально _or_ глобально, сообщение об ошибке говорит« global ». Если вы хотите понять _why_, то это сообщение об ошибке, вы должны узнать, как Python решает, когда искать locals vs.Глобал; если вы просто хотите его исправить, просто назначьте его либо локально, либо глобально, в зависимости от того, что подходит для вашего дизайна. – abarnert
Как вы можете видеть, я сначала пытаюсь получить пользовательский ввод, чтобы проверить, входят ли они в «q», а затем принять целочисленный ввод после, который является номером индекса для пользователя, чтобы выбрать строку в списке. Теперь я могу видеть, как я не определил DataPlotLoc, но это должно быть правильное имя файла csv? –