当前位置: 首页 > 知识库问答 >
问题:

PyPDF2,为什么我会得到一个索引错误?列表索引超出范围

商飞航
2023-03-14

我正在阅读Al Sweigart的书《自动化无聊的东西》,我对我遇到的索引错误感到不知所措。我正在使用PyPDF2尝试打开一个加密的PDF文档。我知道这本书是2015年的,所以我去了PyPDF2。PdfFileReader文档,看看我是否遗漏了什么,一切似乎都一样,至少据我所知。所以我不确定这里出了什么问题。

import PyPDF2
reader = PyPDF2.PdfFileReader('encrypted.pdf')
reader.isEncrypted  # is True
reader.pages[0]

给予:

Traceback (most recent call last):
    File "<pyshell#65>", line 1, in <module>
pdfReader.getPage(0)
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1176, in getPage
self._flatten()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1505, in _flatten
catalog = self.trailer["/Root"].getObject()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/generic.py",    line 516, in __getitem__
return dict.__getitem__(self, key).getObject()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/generic.py", line 178, in getObject
return self.pdf.getObject(self).getObject()
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py", line 1617, in getObject
raise utils.PdfReadError("file has not been decrypted")
PyPDF2.utils.PdfReadError: file has not been decrypted
pdfReader.decrypt('rosebud')
1
pageObj = reader.getPage(0)
Traceback (most recent call last):
    File "<pyshell#67>", line 1, in <module>
pageObj = pdfReader.getPage(0)
    File "/home/user67/.local/lib/python3.6/site-packages/PyPDF2/pdf.py",line 1177, in getPage
return self.flattenedPages[pageNumber]
IndexError: list index out of range

在问我的问题之前,我在谷歌上搜索了一下,找到了这个带有“建议修复”的链接。然而,我对这一点很陌生,想看看解决方法是什么。我对此一无所知。

共有2个答案

贡念
2023-03-14

我犯了同样的错误。我在控制台上工作,在解密之前我使用了阅读器。getPage(0)。解密前不要使用getPage(#)/页面[#]

使用如下代码

reader = PyPDF2.PdfFileReader("file.pdf")
# reader.pages[0]    # do not use this before decrypt
if reader.isEncrypted:
    reader.decrypt('')
reader.pages[0]
陈胤
2023-03-14

我想通了。问题是由在IDLE shell中解密文件之前运行“pdfReader.getPage(0)”引起的。如果您删除该行,或者在收到错误后不使用该行重新开始,它将正常工作。

 类似资料:
  • 我已经使用创建了“CfnUserPool”对象https://docs.aws.amazon.com/cdk/api/latest/python/aws_cdk.aws_cognito/CfnUserPool.html aws文件。 我想获取UserPool的“Pool Id”。其Id值为“us-east-1_4kxxxxxx”。我使用python尝试了很多选项来获取这个值,但都没有成功。 所以我

  • 我试着运行这个: 但是得到这个错误: 回溯(最后一次调用): 文件“C:\Users\Shakh\Desktop\Hello3.py”,第4行,在 打印(“Hallo”,sys.argv[1]) 索引器:列表索引超出范围

  • 问题内容: 我编写了这段代码,将整个以10为底的数字转换为二进制。我相信代码就是它所需要的一切,但是我无法让ArrayLists正常工作。我已经在这个网站上花了几个小时,而其他人则尝试了无数次更改,但无济于事。我已经获得了可以在没有和错误的情况下进行编译的代码,但是一旦输入int程序就会崩溃。 这是代码: 这些是我输入数字时Java抛出的异常。 我希望这是足够的信息。 问题答案: 在您的代码中,您

  • 问题内容: 在玩数组切片时,我注意到切片的类型不会产生数组索引超出字符串的界限错误。 产生输出: 有人可以解释为什么吗?它不应该产生超出范围的数组索引错误吗?如果我尝试做类似的事情,Python会产生这个错误。 问题答案: 切片用于创建新列表 。如果索引不在列表中元素的数量范围内,我们可以返回一个空列表。因此,我们不必抛出错误。 但是,如果尝试访问列表中大于元素数量的元素,则无法返回任何默认值(即

  • 错误 ()1中的索引器错误回溯(最近一次调用)---- ~/Documents/PhD/IntelliSys19/journal/ColdStart_实验/相似性_函数。用户中u2的装饰矩阵中的py()145:146评级1=np。nan_to_num(np.array(user_ratings_matrix.iloc[u1-1].values))-- ~/anaconda3/lib/python3

  • 我有一个基于Euler项目问题3的代码:“13195的素数因子是5、7、13和29。600851475143中最大的素数因子是什么?” 我在下面有一个我认为可行的代码,但第9行()不断返回错误:“索引器:列表索引超出范围”。当我在for循环中移动时,似乎并没有修改列表,所以我不确定出了什么问题。 有人知道我哪里错了吗? 非常感谢。