On 02:10 pm, c...@rebertia.com wrote:
On Fri, Jan 29, 2010 at 5:30 AM, andrew cooke <and...@acooke.org> wrote:
Is there any way to change the name of the function in an error
message? �In the example below I'd like the error to refer to bar(),
for example (the motivation is related function decorators - I'd like
the wrapper function to give the same name)
def foo():
... � � return 7
...
foo.__name__ = 'bar'
foo(123)
Traceback (most recent call last):
�File "<stdin>", line 1, in <module>
TypeError: foo() takes no arguments (1 given)

It gets weirder:
print(foo)
<function bar at 0x37b830>

The name is represented in (at least) two places, on the function object and on the code object:

   >>> def foo(): pass
   ...    >>> foo.func_name
   'foo'
   >>> foo.func_code.co_name
   'foo'
   >>> foo.func_name = 'bar'
   >>> foo
   <function bar at 0xb74f2cdc>
   >>> foo.func_code.co_name = 'baz'
   Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
   TypeError: readonly attribute
   >>>
new.function and new.code will let you construct new objects with different values (and copying over whichever existing attributes you want to preserve).

Jean-Paul
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to