Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

list.append(obj) causes traceback - why is this?

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
like image 683
zeboidlund Avatar asked Aug 05 '26 17:08

zeboidlund


1 Answers

try replacing ++self._tag_count and ++current_index with self._tag_count+=1 and current_index+=1 respectively

++var works in most languages, but python isn't like most languages.

like image 151
Cinder Avatar answered Aug 08 '26 11:08

Cinder



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!