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