Consider this script, which runs successfully on Python 3:
import cgitb
import sys
def fiter():
assert False
yield 1, 1
yield 2, 2
yield 3, 3
try:
x = set(id_ for id_, _ in fiter())
except:
print cgitb.html(sys.exc_info())
Run the same script on Python 2.7.13 and you get this error:
Traceback (most recent call last):
File "test.py", line 15, in <module>
print(cgitb.html(sys.exc_info()))
File ".../cgitb.py", line 130, in html
formatvalue=lambda value: '=' + pydoc.html.repr(value))
File ".../inspect.py", line 887, in formatargvalues
specs.append(strseq(args[i], convert, join))
File ".../inspect.py", line 840, in strseq
return join(map(lambda o, c=convert, j=join: strseq(o, c, j), object))
File ".../inspect.py", line 840, in <lambda>
return join(map(lambda o, c=convert, j=join: strseq(o, c, j), object))
File ".../inspect.py", line 842, in strseq
return convert(object)
File ".../inspect.py", line 884, in convert
return formatarg(name) + formatvalue(locals[name])
KeyError: 'id_'
Wrap the generator expression in [] and it also succeeds.
Given that the issue only exists on Python 2.7, it may not need to be addressed, but I wanted to log the issue nonetheless.
|