built-in function- module name clash
Alex Martelli
aleaxit at yahoo.com
Mon Sep 6 06:13:35 EDT 2004
More information about the Python-list mailing list
Mon Sep 6 06:13:35 EDT 2004
- Previous message (by thread): built-in function- module name clash
- Next message (by thread): Pipe IO Problem?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Olivier Vierlinck <Olivier.Vierlinck at iba.be> wrote: > Hi, > > I've a python script using somecalls to the abs() built-in function. > > Now, I have to import a module named 'abs' too... > The consequence if that line code like > > if (abs(a-b) < epsilon: > ... > does not work anymore, with this error msg: > > TypeError: 'module' object is not callable > > Clearly, the interpreter tries first to consider 'abs' as a module name rather than a built-in function name. Nope, it just uses the latest binding you requested for name 'abs', whatever kind of object that may refer to, there's just one (at a given time in a given scope). > Any idea on how to force it to call the abs() fct? Some kind of scoping or specific syntax? > (I could rename the abs module too but ...) A name at a given time in a scope can refer to ONE thing -- so either 'abs' names a function or it names a module, not both, in that one scope at one and the same time. You can import under a false name, no need to rename your abs.py: import abs as myabs or you can get an alias for the builtin before you trample on it: builtin_abs = abs import abs and perhaps restore it later if you're done naming your abs module -- and other ways yet. But you just can't have barename 'abs' refer to two different thing as the same name in the same scope. Alex
- Previous message (by thread): built-in function- module name clash
- Next message (by thread): Pipe IO Problem?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list