简体   繁体   English

为什么我看到“ IndexError:字符串索引超出范围”

[英]Why am I seeing “IndexError: string index out of range”

I'm trying to use reportlab's pdfgen to draw a PDF, but when I try to save my canvas I get this big cranky error: 我正在尝试使用reportlab的pdfgen绘制PDF,但是当我尝试保存画布时,出现了一个很大的胡思乱想的错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/usr/local/bin/ipython-listener in <module>()
----> 1 c = set_canvas(); c.save()

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.pyc in save(self)
   1191            If there is current data a ShowPage is executed automatically.
   1192            After this operation the canvas must not be used further."""
-> 1193         if len(self._code): self.showPage()
   1194         self._doc.SaveToFile(self._filename, self)
   1195 

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/canvas.pyc in showPage(self)
    582 
    583         pageWidth = self._pagesize[0]
--> 584         pageHeight = self._pagesize[1]
    585         cM = self._cropMarks
    586         code = self._code

IndexError: string index out of range

This is the relevant code: 这是相关代码:

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import landscape, letter
from reportlab.lib.units import inch

def set_canvas():
    c = canvas.Canvas("bingo.pdf")
    c.setPageSize(letter)
    c.setPageRotation(90)
    c.setFont('Helvetica-Bold', 14)
    return c

And once that's loaded I run c = set_canvas() and c.save() and get the error. 加载完成后,我运行c = set_canvas()c.save()并获取错误。 If I comment out the setPageSize line it seems to work: 如果我注释掉setPageSize行,它似乎可以工作:

def set_canvas():
    c = canvas.Canvas("bingo.pdf")
    c.setPageRotation(90)
    c.setFont('Helvetica-Bold', 14)
    return c

c = set_canvas()    
c.drawString(72, 72, "Why is this so hard?")
c.save()

But I only started having this problem when I added in the font size. 但是,当我添加字体大小时,我才开始遇到这个问题。 I can't figure out what I'm missing here. 我不知道我在这里想念的是什么。

from reportlab.lib.pagesizes import landscape, letter sets letter as a tuple (612.0, 792.0) -- but I was using "letter" as a variable inside a function later in my script, effectively redefining it as a string. from reportlab.lib.pagesizes import landscape, letterletter作为一个元组(612.0, 792.0) -但我使用稍后在我的剧本“信”为变量的函数内部,有效地重新定义为一个字符串。 And a string has no index [1] so it was out of range when reportlab tried to set the pageHeight with pageHeight = self._pagesize[1] 而且字符串没有索引[1]因此当reportlab尝试使用pageHeight = self._pagesize[1]设置pageHeight时,它超出了范围。

Not for nothing, running pylint would have clued me in to the problem a lot faster. 并非没有,运行pylint会使我更快地了解问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM