2

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

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

先感谢您!

4

3 回答 3

3

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

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

record = [records[-1]] 

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

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

于 2020-08-22T15:59:01.660 回答
0

试试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
于 2020-08-22T16:06:45.870 回答
0

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

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

于 2020-08-22T15:53:13.453 回答