Я написал приведенный ниже код, чтобы найти наследование * 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
привет, я пытаюсь запустить весь файл в vscode и ничего не получил. Я только что заметил, что написал "if название = = " главный: "неправильно, поэтому я ничего не получил от vscode. Моя война результатов с терминала. Извините за это.






в основном вы передаете 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], и это должно решить вашу проблему.
Привет спасибо. Это проблема. Я пытался исправить ошибку другого, но не смог.
попробуйте это, должно работать:
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)»
извините за поздний ответ, я был в отпуске. Я обновил ответ.
благодаря. Но это не так красиво, если я получу один дополнительный аргумент и напечатаю второй как нулевой. Может быть, я хочу понять эту проблему. кстати, с новым годом :)
Это должен быть
if __name__ == "__main__":. Когда я исправляю это, я получаю другие ошибки (несвязанная переменная, как и следовало ожидать), но не ошибку, которую вы описываете.