我在使用 spynner 时遇到了一个奇怪的错误,尽管这个问题是一个通用问题。Spynner 是用于 python 的有状态的网络浏览器模块。它在工作时工作正常,但我几乎每次运行都失败了——
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/spynner-2.16.dev0-py2.7.egg/spynner/browser.py", line 1651, in createRequest
self.cookies,
AttributeError: 'Browser' object has no attribute 'cookies'
Segmentation fault (core dumped)
这里的问题是它的段错误而不是让我继续。
查看 spynner 的代码,我发现 cookies 变量实际上是在__init__()
Browser 类的函数中初始化的,如下所示:
self.cookies = []
现在在失败时,它真的说它__init__()
没有运行,因为它没有看到 cookies 变量。我不明白这怎么可能。如果不局限于 spynner 模块,有人可以大胆猜测 python 对象如何因这样的错误而失败?
编辑:我肯定会在这里粘贴我的代码,除了它不是全部在一个地方让我紧凑地展示它。我应该早点做,但这里是整体结构以及我如何实例化和使用 spynner。
# helper class to get url data
class C:
def __init__(self):
self.browser = spynner.Browser()
def get_data(self, url):
try:
self.browser.load(url)
return self.browser.html
except:
raise
# class that does other stuff among saving url data to disk
class B:
def save_url_to_disk(self, url):
urlObj = C()
html = urlObj.get_data(url)
# do stuff with html
# class that drives everything
class A:
def do_stuff_and_save_url_data(self, url):
fileObj = B()
fileObj.save_url_to_disk(url)
driver = A()
# call this function for multiple URLs.
driver.do_stuff_and_save_url_data(url)
我的运行方式是——
# xvfb-run python myfile.py
段错误可能是我正在做的其他事情。可能是因为我使用的 xvfb 处理不当?我还不知道。我需要提一下,我对 python 比较陌生。
我注意到,当我使用“ http://www.google.com ”运行上面的代码时,我每隔一段时间就会出现段错误。