On Sun, Nov 16, 2008 at 11:55 AM, Tal Einat <[EMAIL PROTECTED]> 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
> [email protected]
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> http://mail.python.org/mailman/options/python-dev/ggpolo%40gmail.com
>
--
-- Guilherme H. Polo Goncalves
Index: Objects/abstract.c
===================================================================
--- Objects/abstract.c (revision 67226)
+++ Objects/abstract.c (working copy)
@@ -2575,13 +2575,11 @@
return null_error();
func = PyObject_GetAttrString(o, name);
- if (func == NULL) {
- PyErr_SetString(PyExc_AttributeError, name);
- return 0;
- }
+ if (func == NULL)
+ return NULL;
if (!PyCallable_Check(func)) {
- type_error("attribute of type '%.200s' is not callable", func);
+ type_error("attribute of type '%.200s' is not callable", func);
goto exit;
}
@@ -2614,13 +2612,11 @@
return null_error();
func = PyObject_GetAttrString(o, name);
- if (func == NULL) {
- PyErr_SetString(PyExc_AttributeError, name);
- return 0;
- }
+ if (func == NULL)
+ return NULL;
if (!PyCallable_Check(func)) {
- type_error("attribute of type '%.200s' is not callable", func);
+ type_error("attribute of type '%.200s' is not callable", func);
goto exit;
}
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com