【问题标题】:python error when extracting a rar file: 'NoneType' object is not iterable提取rar文件时出现python错误:'NoneType'对象不可迭代
【发布时间】:2021-01-23 18:37:06
【问题描述】:

我正在使用rarfile 在 Spyder(python3.6) 中提取代码。尝试执行以下代码时

import rarfile
rar_file = "d:\\test\\reza3.rar"
rar_file = rarfile.RarFile(rar_file)
rar_file.extractall(pwd='123')

我收到此错误

    In [25]: rar_file = "d:\\test\\reza3.rar"
    
    In [26]: rar_file = rarfile.RarFile(rar_file)
    
    In [27]: rar_file.extractall(pwd='321')
    Traceback (most recent call last):
    
      File "<ipython-input-27-61fee530b204>", line 1, in <module>
        rar_file.extractall(pwd='321')
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 847, in extractall
        dst = self._extract_one(inf, path, pwd, not inf.is_dir())
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 912, in _extract_one
        return self._make_file(info, dstfn, pwd, set_attrs)
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 925, in _make_file
        with self.open(info, "r", pwd) as src:
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 783, in open
        return self._file_parser.open(inf, pwd)
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 1241, in open
        return self._open_unrar(self._rarfile, inf, pwd)
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 1294, in _open_unrar
        cmd = setup.open_cmdline(pwd, rarfile, fn)
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 3235, in open_cmdline
        cmdline = self.get_cmdline("open_cmd", pwd)
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 3247, in get_cmdline
        self.add_password_arg(cmdline, pwd)
    
      File "D:\Anaconda3\lib\site-packages\rarfile.py", line 3265, in add_password_arg
        cmdline.extend(args)
    
    TypeError: 'NoneType' object is not iterable

是什么导致了TypeError?您能提供的任何帮助将不胜感激。

【问题讨论】:

  • 您可以首先在问题中包含完整的错误跟踪,以便我们了解错误是如何发生的。
  • 它可能无法找到rar 文件。尝试使用os.path 来访问文件,而不是像这样传递字符串。
  • 这并不像最初看起来那么简单。如果rar_fileNone,最后一行将产生错误'NoneType' object has no attribute 'extractall',而不是关于不可迭代的错误。这个迭代发生在哪里是问题? @VidaHarati,您确实应该将错误的完整堆栈跟踪添加到您的问题中,如果有更多代码,请为我们提供更多代码。
  • 奇怪。这与文件的密码有关。我看不出你能做些什么不同的事情。即使您的文件和密码都是错误的,您也不应该收到这样的错误。看起来像一个错误,但我不知道这是怎么回事,因为我确信这是经过充分测试的领域。
  • 该代码适用于没有密码的文件,但对于受密码保护的档案,它给出了同样的错误!!!

标签: python spyder data-extraction rar winrar


【解决方案1】:

使用“with”,试试这个,放在同一目录下

from rarfile import RarFile
with RarFile('reza3.rar', 'r') as extr:
     extr.extractall(pwd='<your_password>')

【讨论】:

  • from rarfile import RarFile with RarFile('D:\\test\\reza3.rar', 'r') as extr: extr.extractall(pwd='123') 但同样的错误
猜你喜欢
  • 2021-11-26
  • 2014-10-09
  • 2020-03-09
  • 1970-01-01
  • 2011-12-13
  • 2016-09-11
  • 2013-06-03
  • 2018-06-25
  • 2020-03-18
相关资源
最近更新 更多