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
> Python-Dev@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
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
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to