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/