Python 3 typeError: объект 'NoneType' не повторяется

Я написал приведенный ниже код, чтобы найти наследование * args. но у меня ошибка. Я действительно не понимаю ошибку, потому что у меня был ввод, а их не было.

def third(*args, option=True):
    if len(args) == 2:
        word1, word2 = args
    else:
        word1 = args[0]

    if option:
        return word1, word2
    else:
        return word1


def hello(data, *args, option=True):
    print("the data is:", data)
    A, B = third(*args, option=True)
    print("the args are:", A, B)

def world(small, *args, option=True):
    return hello(small, *args)


if __name__ == "main":
    world("data","prediction")

Вывод:

the data is: data
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in world
File "<stdin>", line 3, in hello
TypeError: 'NoneType' object is not iterable

Это должен быть if __name__ == "__main__":. Когда я исправляю это, я получаю другие ошибки (несвязанная переменная, как и следовало ожидать), но не ошибку, которую вы описываете.

tobias_k 29.12.2018 18:46

привет, я пытаюсь запустить весь файл в vscode и ничего не получил. Я только что заметил, что написал "if название = = " главный: "неправильно, поэтому я ничего не получил от vscode. Моя война результатов с терминала. Извините за это.

Ke SHI 29.12.2018 18:59
Почему в 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
2
626
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

в основном вы передаете options = True, что означает, что «третья» функция всегда должна возвращать word1 и word2. но len of args является одним, поэтому word2 не существует в соответствии с вашим условным условием if len (args) == 2.

так что "третья" функция возвращает только word1. в вашей функции "hello" вы пытаетесь сопоставить этот единственный элемент с двумя переменными "A" и "B" с помощью метода A, B = третий (аргументы), который выполняет итерацию возвращаемых значений функции, но не может этого сделать, потому что третий возвращает либо один элемент, либо значение ошибки (потому что вы пытаетесь вернуть слово 2, которого не существует). вот почему возникает эта ошибка

Я не думаю, что это разрешит это, потому что if option: return word1, word2 else: return word1 все равно будет пытаться вернуть как word1, так и word2, потому что параметр True (а word2 не существует). добавьте option = False перед word1 = args [0], и это должно решить вашу проблему.

Frozen Strawberries 29.12.2018 19:14

Привет спасибо. Это проблема. Я пытался исправить ошибку другого, но не смог.

Ke SHI 29.12.2018 19:23

попробуйте это, должно работать:

def third(*args):
    if len(args) == 2:
        word1, word2 = args
        option = True
    else:
        option = False
        word1 = args[0]

    if option:
        return word1, word2
    else:
        return word1, None


def hello(data, *args):
    print("the data is:", data)
    A, B = third(*args)
    print("the args are:", A, B)

def world(small, *args):
    return hello(small, *args)


if __name__ == "__main__":
    world("data","prediction")

привет, давайте забудем, что я хочу, чтобы код делал, и сосредоточимся на коде, который вы изменили. Я получаю сообщение об ошибке «ValueError: слишком много значений для распаковки (ожидается 2)»

Ke SHI 29.12.2018 19:31

извините за поздний ответ, я был в отпуске. Я обновил ответ.

Frozen Strawberries 31.12.2018 08:47

благодаря. Но это не так красиво, если я получу один дополнительный аргумент и напечатаю второй как нулевой. Может быть, я хочу понять эту проблему. кстати, с новым годом :)

Ke SHI 01.01.2019 11:24

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