[Python-Dev] datetime.date.today() raises "AttributeError: time"

Lennart Regebro regebro at gmail.com
Wed Dec 10 11:55:42 CET 2008


A funny thing just happened to me. I tried out causing this error,
just to see how the error message was somehow different, by creating a
time.py in /tmp, and running python from there. Then I removed the
time.py, and went on working.

Two days later, my usage of zc.buildout are broken with a "module time
has no attribute time". Huh?

Turns out, I created an empty time.py in /tmp, just to see the error
message. By buildout will when creating eggs from checked out modules,
copy them to a directory under /tmp, and evidently run python from
/tmp to create the eggs. So that process finds the time.pyc, created
from the empty time.py, which I hadn't deleted, and breaks!

Heh. That was funny. Moral of the story: Don't create python modules
with names that clash with build in modules in /tmp, even for testing.
Or at least, of you do, remember to remove the pyc. :-P Or, reboot
your Linux every night.  Or well. I guess this could have been avoided
in many ways. ;-)

On Sun, Nov 16, 2008 at 17:43, Guilherme Polo <ggpolo at gmail.com> wrote:
> On Sun, Nov 16, 2008 at 11:55 AM, Tal Einat <taleinat at gmail.com> wrote:
>> Steve Holden wrote:
>>> Tal Einat wrote:
>>>> It this desired behavior?
>>>>
>>>> At the very least the exception should be more detailed, perhaps to
>>>> the point of suggesting the probable cause of the error (i.e.
>>>> overriding the time module).
>>>>
>>> How is this different from any other case where you import a module with
>>> a standard library name conflict, thereby confusing modules loaded later
>>> standard library. Should we do the same for any error induced in such a way?
>>
>> The difference is that here the exception is generated directly in the
>> C code so you don't get an intelligible traceback. The C code for
>> datetime imports the time module via the Python C API.
>>
>> In other words, here a function from a module in the stdlib, datetime,
>> barfs unexpectedly because I happen to have a file name time.py
>> hanging around in some directory. There is no traceback and no
>> intelligible exception message, just "AttributeError: time". I had to
>> dig through datetime's C code to figure out which module was being
>> imported via the Python C API, which turned out to be time.
>
> Just like Steve told you, this isn't different from other cases. But,
> at least you get a message a bit more verbose in most cases, like:
>
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> AttributeError: 'module' object has no attribute 'time'
>
> Then I went to look why this wasn't happening with datetime too, and I
> found out that PyObject_CallMethod in abstract.c re sets the exception
> message that would have been set by PyObject_GetAttr by now. Maybe
> someone can tell me why it is doing that, for now a patch is attached
> here (I didn't resist to not remove two trailing whitespaces).
>
>>
>>  This is rare enough that I've never had something like this happen to
>> me in seven years of heavy Python programming.
>>
>> - Tal
>> _______________________________________________
>> Python-Dev mailing list
>> Python-Dev at python.org
>> http://mail.python.org/mailman/listinfo/python-dev
>> Unsubscribe: http://mail.python.org/mailman/options/python-dev/ggpolo%40gmail.com
>>
>
>
>
> --
> -- Guilherme H. Polo Goncalves
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/regebro%40gmail.com
>
>



-- 
Lennart Regebro: Zope and Plone consulting.
http://www.colliberty.com/
+33 661 58 14 64


More information about the Python-Dev mailing list