Re: Please help with error in pdfbase/pdfdoc.py (TypeError: string argument expected, got 'bytes')
raf via reportlab-users <[email protected]> Tue, 25 Feb 2025 15:04:23 +1100
| Newsgroups | gmane.comp.python.reportlab.user |
|---|---|
| Message-ID | <[email protected]> |
Never mind. I patched my version which seemed OK, but it wasn't. I got lots of absurd warnings about files left open that made no sense. I had some StringIO objects in my code that I was passing to reportlab somehow. Now I've changed them to BytesIO objects and things are looking good again. cheers, raf On Tue, Feb 25, 2025 at 01:55:59PM +1100, raf via reportlab-users <[email protected]> wrote: > Hi, > > macos-10.14 (old), python-3.12 (via macports), reportlab-4.3.1 (via pip) > > I'm converting some python2 code that uses reportlab-3.3.0 > to python3 (with reportlab 4.3.1) and I'm encountering the > following error: > > Traceback (most recent call last): > File "/Users/raf/src/aps.py3/lib/./report.py", line 6196, in test_pdf_basefont > report_pdf = report.pdf() > ^^^^^^^^^^^^ > File "/Users/raf/src/aps.py3/lib/./report.py", line 1844, in pdf > self._pdf.save() > File "/opt/local/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/reportlab/pdfgen/canvas.py", line 1301, in save > self._doc.SaveToFile(self._filename, self) > File "/opt/local/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/reportlab/pdfbase/pdfdoc.py", line 215, in SaveToFile > f.write(data) > TypeError: string argument expected, got 'bytes' > > The context of the f.write(data) file is: > > data = self.GetPDFData(canvas) > if isUnicode(data): > data = data.encode('latin1') > f.write(data) > > So data is explictly converted from str to bytes, but > https://docs.python.org/3/tutorial/inputoutput.html > says: > > f.write(string) writes the contents of string to the > file, returning the number of characters written. > > This looks like a bug that would always be triggered > every time this code is run, but that seems unlikely. > It looks like the above code should be: > > data = self.GetPDFData(canvas) > if not isUnicode(data): > data = data.decode('latin1') > f.write(data) > > or even: > > data = self.GetPDFData(canvas) > if not isUnicode(data): > data = data.decode('utf8') > f.write(data) > > What are your thoughts? Is this a bug in reportlab? > If so, can it be fixed? > If not, what might I have done to cause this? > > Many thanks in advance, > raf > > _______________________________________________ > reportlab-users mailing list > [email protected] > https://pairlist2.pair.net/mailman/listinfo/reportlab-users