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

Python 为什么尝试调用此模块会导致“错误”;int对象不可iterable“;错误?,python,int,iterable,Python,Int,Iterable,我试图学习如何从不同文件中的模块调用函数。 为什么尝试使用返回值时会在main中出现“Int object is not iterable”错误 import totalages firstage = int(input('enter age: ')) secondage = int(input('enter age: ')) result = sum(firstage, secondage) print('together you are', result, 'years old')

我试图学习如何从不同文件中的模块调用函数。 为什么尝试使用返回值时会在main中出现“Int object is not iterable”错误

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
当主函数中包含sum函数时,代码按预期工作,以添加两个输入。但是,如果我将函数移动到一个单独的文件,并尝试导入结果并调用它,我会收到一个“int object is not iterable”错误。为什么?

首先,它是一个python内置函数,因此您可能应该将函数重命名为
my\u sum

还有两种方法可以导入函数

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

  • import totalages
    您需要对其执行
    totalages.my_sum(a,b)

  • 这里发生的事情是,您的import语句确实有效,但是您引用了我之前引用的python
    sum
    builtin,它接受一个类似列表的iterable,但是由于您将它传递一个整数,因此您会看到如下错误
    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
    
    您的totalages.py将更改为

    #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')
    
    def my_sum(a, b):
    
        return a + b
    
    如果使用
    导入总计
    则另一个选项是

    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
    

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

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

    从totalages导入总和
    ...
    总数(a、b)
    
    导入总计
    ...
    总计。总和(a,b)
    

    顺便说一下,尽量避免在内置方法中使用相同的名称。这会让你以后更加困惑。

    你应该用适当的python标记来标记你的问题;这样你会得到更多的回复。太好了!很高兴能帮助@Shawn!如果你能勾选答案旁边的勾号,将我的答案标记为已接受,那就太好了:)明白了!再次感谢。