【问题标题】:Error while using tabulate "TypeError: 'int' object is not iterable"使用制表时出错“TypeError:'int'对象不可迭代”
【发布时间】:2020-08-22 15:49:08
【问题描述】:

所以,我在我的最新项目中使用制表来格式化我的数据。但是,它不断给出这个错误,我无法理解它背后的原因。代码如下:

   from datetime import date
   from tabulate import tabulate
   records = []
   sno = [0,1]
   jades = [0,1]
   events = ['0',1]
   dates = ['0',1]
   for i in range(0, len(jades)):
      records.append([sno[i], jades[i], events[i], dates[i]])
        
   print(records)
   record = records[-1]
   print(record)
   print(tabulate(record, headers=["Sno.", "Jades", "Event", "Date"], tablefmt='simple'))

这是输出:

[[0, 0, '0', '0'], [1, 1, 1, 1]]
[1, 1, 1, 1]
Traceback (most recent call last):
  File "/home/kartik/Desktop/discord-bot/Rem.py", line 16, in <module>
    print(tabulate(record, headers=["Sno.", "Jades", "Event", "Date"], tablefmt='simple'))
  File "/home/kartik/.local/lib/python3.8/site-packages/tabulate.py", line 1426, in tabulate
    list_of_lists, headers = _normalize_tabular_data(
  File "/home/kartik/.local/lib/python3.8/site-packages/tabulate.py", line 1103, in _normalize_tabular_data
    rows = list(map(list, rows))
TypeError: 'int' object is not iterable

请注意,我发布的代码只是我发现导致错误的部分。这些行号可能不同。

我试图弄清楚自己,但我唯一能想到的就是这段代码:

record = [records[-1]] 

我将最后的记录转换为它自己的列表。

请帮助我了解其背后的原因。我是python的初学者,所以我的问题可能很愚蠢。

提前谢谢你!

【问题讨论】:

    标签: python python-3.x tabulate


    【解决方案1】:

    根据documentation,要制表的第一个参数是可迭代或类似的可迭代,如电子表格。您需要行和列。您传入的只是一个列表,因此在内部,它首先获取第一个元素(在您的情况下为“1”),将其视为一行,然后尝试遍历每一列,这是引发异常的地方.

    当你将它包裹在另一组括号中时,例如:

    record = [records[-1]] 
    

    那么你实际上有[[1, 1, 1, 1]],它是一行(外括号),包含四列(内括号)。

    我从来没有使用过这个库,所以我可能在这里切换了行/列,但概念是一样的。

    【讨论】:

    • 好的,我找到了我错的部分。我试图做的是在执行“记录[-1]”时显示该列表的最后一部分,我忘记了我将得到的结果将是 [1, 2, 3, 4 ] 而我认为我会得到 [[1, 2, 3, 4]]。
    【解决方案2】:

    在这里尝试recordsrecord

    print(tabulate(records, headers=["Sno","Jades", "Event","Date"],tablefmt='simple'))

    它的作品

    [[0, 0, '0', '0'], [1, 1, 1, 1]]
    [1, 1, 1, 1]
      Sno    Jades    Event    Date
    -----  -------  -------  ------
        0        0        0       0
        1        1        1       1
    

    【讨论】:

    • 问题是我只希望它显示最后一条记录的输出我的意思是它具有的最后一个列表示例:[1, 1, 1, 1] 而不是零号
    • 哦,对不起,我想看看
    【解决方案3】:

    试试print(tabulate(records, headers=["Sno.", "Jades", "Event", "Date"], tablefmt='simple'))

    原因是 tabulate 函数中的第一个参数需要一个类型表对象。在您当前的代码中,record 设置为记录列表中的最后一项,它是一个 int。 Tabulate 需要一个表来迭代,所以传入记录列表

    【讨论】:

    • 问题是我只希望它显示最后一条记录的输出我的意思是它具有的最后一个列表示例:[1, 1, 1, 1] 而不是零号
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2020-02-26
    • 2015-04-06
    相关资源
    最近更新 更多