为什么尝试调用此模块会导致“ int对象不可迭代”错误?

时间:2019-05-04 05:37:15

标签: python int iterable

我正在尝试学习如何从其他文件中的模块调用函数。 为什么尝试使用返回的值在主体中给我一个“ Int object is notererable”错误?

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

当求和函数包含在主体中时,该代码按预期工作以添加两个输入。但是,如果我将函数移到一个单独的文件并尝试导入结果并调用它,则会收到“ int object is notererable”错误。为什么?

2 个答案:

答案 0 :(得分:0)

首先,sum是python内置函数,因此您应该将函数重命名为my_sum

还有两种导入函数的方法

  1. from totalages import my_sum,它告诉解释器进入totalages.py并导入函数my_sum,然后您可以直接使用my_sum(a, b)

    < / li>
  2. import totalages,您需要为此totalages.my_sum(a,b)

现在发生了什么事情,您的import语句确实起作用了,但是您引用了我之前引用的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

答案 1 :(得分:0)

您的导入不正确。通过此导入,sum不能调用sum()方法,而只能由totalages.sum()调用。您收到此错误消息是因为python使用内置方法sum而不是您的方法,该方法接收list作为参数。

下面是一些可以使用的正确方法:

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

totalages.sum(a, b)

顺便说一句,尝试避免在内置方法中使用相同的名称。稍后,它将导致您更加困惑。