Adam Lewis Adam Lewis - 3 months ago 26
Python Question

Unable to debug interactively with Python 2.7

I had asked a question previously on relative paths in python in SO question: How can I access relative paths in Python 2.7 when imported by different modules

The provided answer worked great in all of my scripts and functions. However, when trying to debug the files in IDLE (Python 2.7) it generates run time errors.

Can anyone point me to documentation on using the

__file__
notation? Also I would like to understand why IDLE generates errors while running the sample code but running the same file from the command line or double clicking it (for the windows users) does not.

Any help would be greatly appreciated!

Note that I am running Python 2.7 on Windows XP with virtualenv (unactivated during these tests).

Sample Code

import os
import sys
curdir = os.path.dirname(__file__)
sys.path.append(curdir + '/..')


Error

Traceback (most recent call last):
File "C:\MyFile.py", line 3, in `<module>`
curdir = os.path.dirname(`__file__`)
NameError: name '`__file__`' is not defined

Answer

__file__ won't be set if you're writing this in the interpretor.

So:

>>> import os, sys
>>> curdir = os.path.dirname(__file__)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '__file__' is not defined

Is expected.

__file__ is the name of the file that was called by the python interpretor - so if you ran this from a script it would work.

$ python curdir.py
$

(The script is exactly the same as what I put into the interpretor, hence no error or output)

From what I've observed using IDLE before, it acts as an interpretor - so it'll run the file in question. However, it wasn't started with that file, so the __file__ is never set.