【问题标题】:Iterating Through a list with functions Type Error [closed]遍历具有函数类型错误的列表[关闭]
【发布时间】:2021-05-17 04:39:09
【问题描述】:

我对 python 很陌生,我一直在 udemy 上学习,只是在业余时间玩。我正在使用一些生成 dict/list 的函数。我遇到了“TypeError: 'list' object is not callable”的问题

error, botlist = bots(None)
for bot in botlist:
    print(bot.get('id'))
    print(type(bot.get('id')))

for bot in botlist:
    botid = bot.get('id')
    print(type(bot.get('id')))

    error, dealsa = dealsa(botid)

    my_list = []
    for deal in dealsa:
        my_list.append(f"id:{deal.get('id')} name:{deal.get('bot_name')} finished?:{deal.get('finished?')} bot_id:{deal.get('bot_id')}")  
        myfile=open(f"{deal.get('bot_id')}_active.txt","w")
        myfile.write('\n'.join(my_list))
        myfile.close()

    error, dealsf = dealsf(botid)

    my_list = []
    for deal in dealsf:
        my_list.append(f"id:{deal.get('id')} name:{deal.get('bot_name')} finished?:{deal.get('finished?')} bot_id:{deal.get('bot_id')}")  
        myfile=open(f"{deal.get('bot_id')}_history.txt","w")
        myfile.write('\n'.join(my_list))
        myfile.close()

因此可以保存文本文件。如果我在 botlist 循环中删除 bot 并手动设置一个 id,它将正确创建文本文件。当我尝试在 for 循环中运行它时,出现类型错误。但它确实列出了打印函数中的机器人 ID,然后创建了第一组文本文件。打印函数 int 结果是我需要输入到 deala 和 dealf 函数的 botid 中的正确整数。我猜我做错了迭代,但不知道如何纠正它。这是当前的输出:

2649989
<class 'int'>
2642117
<class 'int'>
2628896
<class 'int'>
2555868
<class 'int'>
2536597
<class 'int'>
2481665
<class 'int'>
2392904
<class 'int'>
2367291
<class 'int'>
Traceback (most recent call last):
  File "path", line 79, in <module>
    error, dealsa = dealsa(botid)
TypeError: 'list' object is not callable

我真的很困惑为什么第一个 print for 循环有效,但第二个却抛出了类型错误。

【问题讨论】:

  • 显然dealsa 是一个列表,不能像函数一样调用列表。但是您没有显示定义 dealsa 的代码的相关部分,因此我们无法告诉您更多信息。
  • 假设您实际上有一个名为 dealsa 的函数,它返回一个元组,其中第二项是一个列表,如果您不将该列表命名为与该函数相同的名称,将会有所帮助。
  • 请提供预期的MRE - Minimal, Reproducible Example。显示中间结果与预期结果的偏差。我们应该能够将您的代码块粘贴到文件中,运行它并重现您的问题。这也让我们可以在您的上下文中测试任何建议。

标签: python list function


【解决方案1】:

您的问题发生在这一行:

error, dealsa = dealsa(botid)

在这里,您将 dealsea 函数替换为调用它的(部分)返回值。当您稍后(在后续迭代中)尝试再次调用该函数时,您将获得较早的结果(列表)而不是您想要的函数。

解决方案不是很复杂,只需为函数或列表选择不同的名称即可。在代码的后半部分,dealsf 也会出现同样的问题。它还没有引发异常,因为你没有得到它,但如果你只修复dealsa,你会开始在那里崩溃。

【讨论】:

  • 哦,我什至没有意识到这是一个问题。接得好。它现在正在工作。我没有包含这些函数,因为它们使用特定于程序 api 的库。我不知道他们会不会有帮助,如果没有凭据,您将无法运行代码。这是记录的功能之一。它们都是相似的 def dealf(bot_id): error, bot_info = p3cw.request( entity="deals", action="", payload = { "limit": 1000, "offset": 0, "bot_id": bot_id, "scope": "finished", } ) 返回错误,bot_info
猜你喜欢
  • 1970-01-01
  • 2021-06-07
  • 2014-07-11
  • 2019-04-03
  • 1970-01-01
  • 2019-12-30
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多