Error while using tabulate "TypeError: 'int' object is not iterable"

Error while using tabulate "TypeError: 'int' object is not iterable"

所以,我在最近的项目中使用表格来格式化我的数据。但是,它一直出现此错误,我无法理解其背后的原因。这是代码:

   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 的初学者,所以我的问题可能很愚蠢。

提前致谢!

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

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

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

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

record = [records[-1]] 

然后你实际上有 [[1, 1, 1, 1]],这是包含四列(内括号)的一行(外括号)。

我从来没有用过这个库,所以我可能rows/columns切换到这里,但概念是一样的。

尝试 records 没有 record 这里

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