Я столкнулся с странной ошибкой со шпинером, хотя вопрос является общим. Spynner - это модуль веб-браузера с поддержкой состояния для python. Он отлично работает, когда он работает, но я почти с каждым запуском я получаю отказ, говоря это -Код python не видит переменную класса, инициализированную в функции __init __()
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)
Проблемы здесь является его segfaulting и не позволяя мне продолжить.
Глядя на код spynner я вижу, что переменная печенье фактически инициализируется в функции __init__()
для класса браузера, как это:
self.cookies = []
Теперь в случае неудачи его действительно говорит о том, что __init__()
не запускается так как он не видит переменную cookie. Я не понимаю, как это возможно. Не ограничиваясь модулем spynner, кто-то может предположить, как объект python может потерпеть неудачу с такой ошибкой?
EDIT: Я определенно наклеил бы мой код здесь, кроме его не всех в одном месте, чтобы я мог его компактно показать. Я должен был сделать это раньше, но вот общая структура и как я создаю экземпляр и использую 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», я получаю segfault в другой раз.
Как вы называете Spynner? Вы подклассифицируете браузер? –
Ошибка сегментации? Что бы вы ни делали, этого не должно было быть. – user2357112
Можете ли вы показать нам свой код, пожалуйста? Какой-либо код делает «del self.cookies» в любой момент? –