Consider the following code:
for url in urls:
obj = HtmlInfo()
obj.url = url
obj.html = hc.get_html(url)
obj.tag_count = hc.get_num_tags(obj.html, 0, True)
htmlinfos.append(obj)
where urls is a list of urls, and htmlinfos is initialized to an empty list like so -before the loop, of course:
htmlinfos = [ ]
Yet, for whatever reason, I get a list-assignment index out of range exception when I try to run this code.
What could be the problem with this? Note, my Python version is 2.7, and I’m using the latest stable version of Django (1.4, I believe)
Update – Traceback
Environment:
Request Method: GET
Request URL: http://xx.xxx.xxx.xx/xxx/0/test/
Django Version: 1.4.1
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'scrapper',
'django_pdb')
Installed Middleware:
('django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django_pdb.middleware.PdbMiddleware')
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/usr/share/nginx/www/xxx/private/xxx/views.py" in test
44. return HttpResponse("Dis be er bad query yo " + test_id )
File "/usr/share/nginx/www/xxx/private/xxx/views.py" in __get_html_list
23. return list
Exception Type: IndexError at /xxx/0/test/
Exception Value: list assignment index out of range
Update – __get_html_list()
def __get_html_list():
hc = HtmlCounter()
htmlinfos = [ ]
#add more urls here for testing
urls = [ '/usr/share/nginx/www/xxx/private/template/test/html_count_test.html' ]
for url in urls:
obj = HtmlInfo()
obj.url = url
obj.html = hc.get_html(url)
obj.tag_count = hc.get_num_tags(obj.html)
htmlinfos.append(obj)
return htmlinfos
Note
originally htmlinfos was known simply as list, so I changed that before I posted this, reran it and I’m still getting the same error :/
Update – get_html_tag_count()
For brevity, I figured I may as well post this too, in case this could be related to the problem:
def get_num_tags(self, html):
if reset:
self.reset()
current_index = 0
for char in html:
if (char == "<"):
close_index = html[current_index:].find("/>", current_index)
if close_index == -1:
break
else:
++self._tag_count
++current_index
return self._tag_count
try replacing
++self._tag_countand++current_indexwithself._tag_count+=1andcurrent_index+=1respectively++varworks in most languages, but python isn’t like most languages.