Почему попытка вызвать этот модуль приводит к ошибке «объект int не повторяется»? - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь узнать, как вызвать функцию из модуля в другом файле. Почему попытка использовать возвращаемое значение выдает мне ошибку 'Int object not iterable' в main?

import totalages



firstage = int(input('enter age: '))
secondage = int(input('enter age: '))

result = sum(firstage, secondage)

print('together you are', result, 'years old')
####################### Это в отдельном файле с именем totalages.py
def sum(a, b):

    return a + b

Код работает как задумано, чтобы добавить два входа, когда функция суммы включена в основную. Но если я перемещаю функцию в отдельный файл и пытаюсь импортировать результат и вызывать его, я получаю сообщение об ошибке «объект не является итеративным». Почему?

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

У вас неверный импорт. При таком импорте метод sum не может быть вызван sum(), но totalages.sum(). Вы получили это сообщение об ошибке, потому что python использует встроенный метод sum, который получает list в качестве параметра вместо вашего.

Ниже приведены некоторые правильные способы, которыми вы можете воспользоваться:

from totalages import sum
...
sum(a, b)
import totalages
...

totalages.sum(a, b)

Кстати, старайтесь не использовать одно и то же имя со встроенными методами. Позже это приведет вас к еще большему замешательству.

0 голосов
/ 04 мая 2019

Перво-наперво, sum - это встроенная функция python, поэтому вам, вероятно, следует переименовать вашу функцию в my_sum

Также есть два способа импортировать функцию

  1. from totalages import my_sum, который говорит переводчику перейти к totalages.py и импортировать функцию my_sum, а затем вы можете напрямую использовать my_sum(a, b)

  2. import totalages, для чего вам нужно сделать totalages.my_sum(a,b)

Теперь, что здесь произошло, что ваш оператор импорта сработал, но вы ссылались на встроенный Python sum, на который я ссылался ранее,который принимает итеративный как список, но так как вы передаете ему целое число, вы получаете ошибку, которую вы видели int object is not iterable следующим образом

In [2]: sum(1+2)                                                                                                                                      
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-6576b93b138f> in <module>
----> 1 sum(1+2)

TypeError: 'int' object is not iterable

Так что, учитывая все это, ваш исходный код изменится на

#Corrected import statement
from totalages import my_sum

firstage = int(input('enter age: '))
secondage = int(input('enter age: '))

result = my_sum(firstage, secondage)

print('together you are', result, 'years old')

И ваш totalages.py изменится на

def my_sum(a, b):

    return a + b

Или другой вариант, если вы используете import totalages, будет

import totalages

firstage = int(input('enter age: '))
secondage = int(input('enter age: '))

result = totalages.my_sum(firstage, secondage)

print('together you are', result, 'years old')

Вывод будет выглядетькак:

enter age: 20
enter age: 30
together you are 50 years old
...