Python:FancyURLopener在第二个循环上失败,ValueError:读取关闭的文件

时间:2018-07-24 01:01:21

标签: python request fancyurlopener

\ Anaconda3 \ lib \ tempfile.py”,行483,在func_wrapper中     return func(* args,** kwargs) ValueError:读取已关闭的文件

我不知道这是否是问题,即使我无法弄清楚。这在循环中被调用,第一个循环工作正常,但第二个循环出错。读取显示为

的文件

”此类为以下文件打开的文件提供了包装器:     临时使用。特别是它寻求自动     删除不再需要的文件。“

但是仍然需要并关闭它,从而导致错误。这是我的最佳猜测。

我之所以使用它,是因为服务器阻止了正常请求。顺便说一句,正常的请求会循环并正常工作(经过测试的无阻塞链接)。这个在第一个周期工作,然后在第二个周期失败。我认为是因为“链接”变量正在重用。

  class AppURLopener(urllib.request.FancyURLopener):
      version = "Mozilla/5.0"

循环部分

  opener = AppURLopener()
  linkSource = opener.open(link).read() #error on this line "read of closed file (second run through)"

我试图修改代码,以使“ link”变量与我想解决的方式不同,但是我能找到的唯一方法是将其设为列表或字典。我猜这两个都不起作用,因为基本变量仍处于关闭状态。

在那种情况下,我尝试在循环开始时使用open(),这样会产生类似“ TypeError:预期的str,字节或os.PathLike对象,而不是dict”的错误

如果我只是一个普通的字符串,那么它也不起作用,这在另一点上也没有意义,因为它上面写着“ expected str”,我认为如果它只是一个普通的字符串,那还是可以的,但是只会产生另一个错误“ OSError:[Errno 22]无效的参数:http://www.link.com

我想随机变量不能与open()一起使用。那么为什么关闭呢?还是其他封闭的东西?

我不知道。

1 个答案:

答案 0 :(得分:0)

我使用的第二个URL带有“#!”在它的结尾。不知何故在程序中破坏了它。解析出来,效果很好。

相关问题