Can't figure out where SyntaxError: can not delete variable 'x'referenced in nested scope us coming

A

Albert Hopkins

Say I have module foo.py:

def a(x):
def b():
x
del x

If I run foo.py under Python 2.4.4 I get:

File "foo.py", line 4
del x
SyntaxError: can not delete variable 'x' referenced in nested
scope

Under Python 2.6 and Python 3.0 I get:

SyntaxError: can not delete variable 'x' referenced in nested
scope


The difference is under Python 2.4 I get a traceback with the lineno and
offending line, but I do not get a traceback in Pythons 2.6 and 3.0.

The reason why I ask is... I have a python package, 'foo', with
__init__.py and a whole bunch of other modules. It runs fine on Python
2.4 as well as 2.6, but when I run 2to3 on my foo directory and try to
'import foo' in Python 3 I get no traceback, I can't 'import foo' in
Python 2 because 'foo' is no longer Python2-compatible, but my original
Python2 version of foo imports just fine.

So is there a way to find the offending code w/o having to go through
every line of code in 'foo' by hand? I've tried using pdb but it just
breaks out of the debugger.

thanks,
-a
 
S

Steven D'Aprano

The difference is under Python 2.4 I get a traceback with the lineno and
offending line, but I do not get a traceback in Pythons 2.6 and 3.0.

If tracebacks are broken, surely that would be a pretty huge bug. It
seems to be broken in 2.5 as well:
.... def b():
.... x
.... del x
....
SyntaxError: can not delete variable 'x' referenced in nested scope


So is there a way to find the offending code w/o having to go through
every line of code in 'foo' by hand?

Just search for "del x" in your code. Your editor does have a search
function, surely?
 
A

Albert Hopkins

]
Just search for "del x" in your code. Your editor does have a search
function, surely?

Well, you'd think I'd be smart enough to think of that one, wouldn't
you? Actually, how could you since you don't know me ;-)... Anway, I
already did that and could not find the offending code.

I submitted this bug [1]. I applied the given patch but the line it
shows isn't a "del" anything so I'm even more confused.
 
S

Steven D'Aprano

Well, you'd think I'd be smart enough to think of that one, wouldn't
you? Actually, how could you since you don't know me ;-)... Anway, I
already did that and could not find the offending code.

You should have said :)

I submitted this bug [1]. I applied the given patch but the line it
shows isn't a "del" anything so I'm even more confused.

Ouch. You have my sympathies.

I guess you're going to have to just import each module one at a time
until you find the module that fails, then search that one.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,731
Messages
2,569,432
Members
44,834
Latest member
BuyCannaLabsCBD

Latest Threads

Top