NameError возникает после вызова вложенной функции

Поэтому я разделил файл .txt на список списков (показанный ниже). Однако, когда я пытаюсь запустить print(splitKeyword(keywords[1][0])), чтобы попытаться распечатать первый элемент второго списка / элемента в keywordList, я получаю сообщение об ошибке: NameError: name 'keywordList' is not defined. Как я могу это исправить?

def functionOne(textFile):
        textFileVar = open(textFile, 'r')

    def splitKeyword(argument):
        keywordList = []
        for line in argument:
            keywordList.append(line.strip().split(','))
        return keywordList

    splitKeyword(textFileVar)
    print(keywordList[1][0])

results = functionOne("text1.txt")
print(results)

Это содержимое text1.txt / textFile / textFileVar

hello,world

123,456

Вот как выглядит keywordList при печати:

[[hello, world], [123, 456]]

вы возвращаетесь из функции, но не ловите. поэтому попробуйте keywordList = splitKeyword (textFileVar), поскольку keywordList является локальным для этой функции.

Jay Parikh 11.11.2018 06:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
140
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ваш keywordList является локальным для функции splitKeyword(), а не для функции functionOne(). Вот почему вы получаете ошибку NameError.

@CosmicCat Ну, ваша функция splitKeyword () что-то возвращает, так что вы можете использовать этот возврат, верно? Возьмите то, что он возвращает в переменной, и затем используйте эту переменную для его печати.

Arjofocolovi 11.11.2018 06:51

список ключевых слов - это локальная переменная для функции splitKeyword, которая ее возвращает, поэтому вы можете напрямую использовать эту функцию и сократить код.

def functionOne(textFile):
    textFileVar = open(textFile, 'r')
    def splitKeyword(argument):
        keywordList = []
        for line in argument:
            keywordList.append(line.strip().split(','))
        return keywordList

    print(splitKeyword(textFileVar))

results = functionOne("text1.txt")
print(results)
Ответ принят как подходящий

Попробуй это:

def functionOne(textFile):
        textFileVar = open(textFile, 'r')

    def splitKeyword(argument):
        keywordList = []
        for line in argument:
            keywordList.append(line.strip().split(','))
        return keywordList

    output = splitKeyword(textFileVar)
    print(output[1][0])
    return output

results = functionOne("text1.txt")
print(results)

посмотрите на return keywordList в функции splitKeyword. он возвращает значение (keywordList). но в других областях вы не можете получить доступ к этой переменной, поэтому вам нужно где-то ее сохранить.

нужен ли «обратный выход»? когда я удаляю его, я получаю вывод консоли, который я ищу, но слово «None» появляется прямо под ним

CosmicCat 11.11.2018 07:23

Я думаю, это из-за другой строчки вашего кода. но удалите и проверьте, хотите ли вы.

Mehrdad Pedramfar 11.11.2018 07:30

когда я сохраняю возвращаемый результат, я не получаю его, но когда я его удаляю, я не получаю его, вызовет ли это какие-либо проблемы?

CosmicCat 11.11.2018 07:37

это из-за results = functionOne("text1.txt"). return output вернет значение, поэтому results не будет пустым (None), если вы его удалите, ваша функция не будет иметь никаких выходов, поэтому результаты будут None.

Mehrdad Pedramfar 11.11.2018 07:44

Другие вопросы по теме