Python fpdf2: AttributeError ⇐ Python

Программы на Python
Anonymous
Python fpdf2: AttributeError

Сообщение Anonymous »

У меня есть «Исключение в обратном вызове Tkinter», которое, похоже, возникает внутри импортированного мной пакета, а не из моего собственного кода. Как решить эту проблему?
Хотя поместить данные из tkinter в формат PDF для печати, я запускаю fpdf2 в Python 3.11.3 в Windows 11 Home 23H2.
Строка кода, о которой идет речь, я скопировала. прямо из документации https://py-pdf.github.io/fpdf2/Tables.html.

Код: Выделить всё

with pdf.table() as table:
Вот полная трассировка этой строки.

Код: Выделить всё

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "C:\Users\Paul\Dropbox\Work\ProgrammingProjects\cellar\main.py", line 1453, in cellar_to_pdf
with pdf.table() as table:
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\contextlib.py", line 144, in __exit__
next(self.gen)
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 5005, in table
table.render()
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\table.py", line 215, in render
row_info = list(self._process_rowpans_entries())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\table.py", line 590, in _process_rowpans_entries
_, img_height, text_height = self._render_table_cell(
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\table.py", line 496, in _render_table_cell
page_break_text, cell_height = self._fpdf.multi_cell(
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 226, in wrapper
return fn(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\deprecation.py", line 32, in wrapper
return fn(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 3652, in multi_cell
text = self.normalize_text(text)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Paul\AppData\Local\Programs\Python\Python311\Lib\site-packages\fpdf\fpdf.py", line 4361, in normalize_text
return text.encode(self.core_fonts_encoding).decode("latin-1")
^^^^^^^^^^^
AttributeError: 'numpy.int64' object has no attribute 'encode'
Я не могу понять, где я ошибся. Будем признательны за некоторую помощь в интерпретации обратной трассировки.
Я не получил соответствующих результатов, погуглив «Объект AttributeError:'numpy.int64' не имеет атрибута 'encode'».
Далее представлен минимальный воспроизводимый пример кода.

Код: Выделить всё

from fpdf import FPDF
table_data = (
('Producer', 'Series/Line', 'Wine Name', 'Grape(s)', 'Year', 'Age', 'On Hand'),
('IT CN/331', '', 'Barolo Legato', 'Nebbiolo', '2015', '8y, 11m, 16d', 1, '1 left of 1 stocked'),
('John Galt', '', 'Cabernet Sauvignon', 'Cabernet Sauvignon', '2016', '7y, 11m, 16d', 1, '1 left of 1 stocked'),
('Santos Lima', '', 'Confidencial Reserva', 'Red Blend', '2017', '6y, 11m, 16d', 3, '3 left of 4 stocked'),
)
pdf = FPDF(unit="in", format="Letter")
pdf.add_page()
pdf.set_margins(left=0.75, top=0.75, right=0.75)
pdf.set_font("helvetica", size=10)
with pdf.table() as table:
for tupl in table_data:
row = table.row()
for value in tupl:
row.cell(value)
pdf.output("C:\\Users\\Paul\\Dropbox\\Work\\ProgrammingProjects\\cellar\\x.pdf")
В Jupyter Notebook это приводит к несколько иной ошибке.

Код: Выделить всё

AttributeError: 'int' object has no attribute 'encode'
ОБНОВЛЕНИЕ
Отправив отчет об ошибке, я узнал, что проблема вовсе не является ошибкой. FPDF.table() принимает только строки. Проблема заключалась в том, что мой седьмой столбец содержит целые числа.

Подробнее здесь: https://stackoverflow.com/questions/790 ... ibuteerror

Вернуться в «Python»