Случайный '>' не поддерживается между экземплярами 'NoneType' и 'float' в xhtml2pdf
Я использую xhtml2pdf в приложении Django для генерации PDF-файлов из html-вывода Pandas. У меня есть эта ошибка, которая возникает случайным образом (не во всех случаях):
Traceback (most recent call last):
File "C:\Python37\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Python37\lib\site-packages\django\core\handlers\base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python37\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\Python37\lib\site-packages\django\views\generic\base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Python37\lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "C:\Python37\lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Python37\lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Python37\lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "D:\DEV\webdeploy\django_proj\django_app\views.py", line 171, in post
return pdfDownload(dppivot, request)
File "D:\DEV\webdeploy\django_proj\django_app\views.py", line 310, in pdfDownload
pdf = pisa.pisaDocument(BytesIO(html_styled.encode("ISO-8859-1")), result)
File "C:\Python37\lib\site-packages\xhtml2pdf\document.py", line 144, in pisaDocument
doc.build(context.story)
File "C:\Python37\lib\site-packages\reportlab\platypus\doctemplate.py", line 1079, in build
self.handle_flowable(flowables)
File "C:\Python37\lib\site-packages\reportlab\platypus\doctemplate.py", line 955, in handle_flowable
(self._fIdent(f,60,frame),_fSizeString(f),self.page, self.frame.id,
File "C:\Python37\lib\site-packages\reportlab\platypus\doctemplate.py", line 890, in _fIdent
return f.identity(maxLen)
File "C:\Python37\lib\site-packages\reportlab\platypus\tables.py", line 421, in identity
tallest = '(tallest row %d)' % int(max(rh))
Exception Type: TypeError at /iw/dataload/
Exception Value: '>' not supported between instances of 'NoneType' and 'float'
Вот мой код :
from rest_framework.views import APIView
import pandas as pd
from xhtml2pdf import pisa
from _io import BytesIO
def pdfDownload(dppivot, request):
html_string = '''
<html>
<head><title>Report</title>
<style>
@page {{
size: A4 landscape;
margin: 1cm;
}}
body{{font-size:9px;font-family: "Roboto","Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
color: #333;}}
</style>
</head>
<body>
<h1>1) Par Flux par produit</h1>
{table}
<br/>
</body>
</html>
'''
result = BytesIO()
html = dppivot.to_html()
html_styled = html_string.format(table=html)
pdf = pisa.pisaDocument(BytesIO(html_styled.encode("ISO-8859-1")), result)
if not pdf.err:
response = HttpResponse(result.getvalue(), content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="report_{}.pdf"'\
.format(date.today())
return response
return None
class DataLoad(APIView):
def post(self, request):
pivot= pd.pivot_table(data)
return pdfDownload(pivot, request)
Похоже, ошибка возникает в библиотеке ReportLab, где она пытается получить максимальную высоту столбцов из html-таблицы. Похоже, что это не связано с версией Python, однако ошибка появляется только на Windows с Python 3.7.7. но не на Debian/ Python3.7.3.