Investigating a strange error that I started getting all of a sudden with gdb-python, I reduced it down to this:
C:\Users\User>python -i
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win 32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> dir(os.path)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'path'
>>> dir(os)
['__builtins__', '__doc__', '__file__', '__name__', '__package__']
Looking through some other 'module' object has no attribute answers, the most common suggestion is that there must be another rogue os.py somewhere in sys.path, and that it was getting loaded, rather than the built-in one. But I checked in PYTHONPATH environment variable, and in the current directory, and there wasn't any other os.py.
So I looked for a way to find the name of the file where an entity was defined, and unsurprisingly, Python has such a facility in the form of the inspect module.
>>> inspect.getsourcelines(os)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Programs\Python273\lib\inspect.py", line 690, in getsourcelines
lines, lnum = findsource(object)
File "C:\Programs\Python273\lib\inspect.py", line 527, in findsource
sourcefile = getsourcefile(object)
File "C:\Programs\Python273\lib\inspect.py", line 451, in getsourcefile
if os.path.exists(filename):
AttributeError: 'module' object has no attribute 'path'
So inspect was relying on os.path, and then I ran out of ideas.
I haven't installed anything new recently. The only thing that happened was a forced shutdown that I had to do, which might have coincided with running a Python script, since I was running a short Python script in a loop repeatedly when the machine became unresponsive and the forced shutdown occurred.