22.10.18 02:16, Terry Reedy пише:
All functions created from lambda expressions get the same pseudo-name '<lambda>'.  This can make tracebacks worse.  Perhaps more importantly, proper testing may become harder.

See https://bugs.python.org/issue34856. But this can work only while lambda's body is a simple expression.

 >>> for i in map(lambda x: x **
           2, 'abc'):
     print(i)

Traceback (most recent call last):
   File "<pyshell#19>", line 2, in <module>
     2, 'abc'):
   File "<pyshell#19>", line 2, in <lambda>
     2, 'abc'):
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

In 3.8 the traceback is different (an can be even more informative with resolved issue34856).

Traceback (most recent call last):
  File "1.py", line 1, in <module>
    for i in map(lambda x: x **
  File "1.py", line 1, in <lambda>
    for i in map(lambda x: x **
TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

Given that there might be a hundred functions named '<lambda>', I think the specific name is a bit helpful.

I think the main problem is not with tracebacks, but with reprs. If you have a pack of callbacks, it is not easy to figure out what they do if they are anonymous functions.

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to