[ python-Bugs-861340 ] UnboundLocalError in cgitb.py

SourceForge.net noreply at sourceforge.net
Thu Dec 18 18:02:24 EST 2003


Bugs item #861340, was opened at 2003-12-16 18:09
Message generated for change (Comment added) made by jemfinch
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=861340&group_id=5470

Category: Python Library
Group: Python 2.3
Status: Open
Resolution: None
Priority: 5
Submitted By: Jeremy Fincher (jemfinch)
Assigned to: Skip Montanaro (montanaro)
Summary: UnboundLocalError in cgitb.py

Initial Comment:
Here's the exception: 
 
Exception 
    return cgitb.text((E, e, tb)).rstrip('\r\n') 
  File "/usr/lib/python2.3/cgitb.py", line 197, in text 
    vars = scanvars(reader, frame, locals) 
  File "/usr/lib/python2.3/cgitb.py", line 76, in scanvars 
    parent = value 
UnboundLocalError: local variable 'value' referenced 
before assignment 
 
And here's the code: 
 
            if lasttoken == '.': 
                if parent is not __UNDEF__: 
                    value = getattr(parent, token, __UNDEF__) 
                    vars.append((prefix + token, prefix, value)) 
            else: 
                where, value = lookup(token, frame, locals) 
                vars.append((token, where, value)) 
        elif token == '.': 
            prefix += lasttoken + '.' 
            parent = value 
 
If lasttoken is '.' and parent is __UNDEF__, value doesn't 
get set.  I'd offer a patch, but I really have no idea what this 
code is doing and so don't know what to set value to. 

----------------------------------------------------------------------

>Comment By: Jeremy Fincher (jemfinch)
Date: 2003-12-18 18:02

Message:
Logged In: YES 
user_id=99508

The code that caused the raised exception (which subsequently 
triggered the exception in cgitb) was this: 
 
        outputstr = '%d %s match \'%s\' (%s):' % (len(bugs), \ 
        utils.pluralize(len(bugs), 'bug'), 
        searchstr, utils.commaAndify(keywords, And='AND')) 
 
That's actually from the diff where I changed it to be a bit more 
idiomatic :)  It wasn't my code, I promise! 

----------------------------------------------------------------------

Comment By: Jeremy Fincher (jemfinch)
Date: 2003-12-18 17:56

Message:
Logged In: YES 
user_id=99508

To be honest, it's just something I ran into in my own test suite 
when my exception-handling logging code caught an exception I 
didn't expect to get raised.  Since I have no idea what the code in 
cgitb that's raising the exception is actually doing, I really don't 
know how to begin to try and narrow it down to a test case. 

----------------------------------------------------------------------

Comment By: Skip Montanaro (montanaro)
Date: 2003-12-18 12:31

Message:
Logged In: YES 
user_id=44345

I pulled scanvars() and lookup() out into a separate file and 
instrumented things a little.  From staring at the code I thought
that perhaps it didn't handle the case where the line starts with 
a dot separating an object and its attribute.  I can't provoke a
failure in that situation though.  See attached lookup.py.

Jeremy, can you fiddle it to make it fail?


----------------------------------------------------------------------

Comment By: Skip Montanaro (montanaro)
Date: 2003-12-18 11:13

Message:
Logged In: YES 
user_id=44345

Sorry, I have no idea what it does either.  I'll look into it a bit,
but don't expect a miracle. :-(


----------------------------------------------------------------------

Comment By: Neal Norwitz (nnorwitz)
Date: 2003-12-18 10:02

Message:
Logged In: YES 
user_id=33168

Jeremy, can you attach a complete test case?

Skip, I realize you didn't write the scanvars code (Ping
did), but you did add text.  So maybe you have an idea. 
>From a brief scan, it looks like if value is initialized to
None, the code might work.  

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=861340&group_id=5470



More information about the Python-bugs-list mailing list