KevinScript
KevinScript copied to clipboard
Printing fails for self-referential lists
If a list contains itself, trying to print it produces 40+ error messages, instead of something more sensible.
Input:
>>> seq = [1,2,3];
>>> seq.append(seq);
>>> print(seq);
Expected output:
[1, 2, 3, [...]]
Actual output:
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (46, 953)
Couldn't call function on line (1, 0)
maximum recursion depth exceeded in cmp
This could be solved by keeping a set of "seen" object ids as you iterate down the repr chain. Not sure if this can be done natively, though.
CPython appears to use an external per-thread global dict for this. See https://hg.python.org/cpython/file/03c65fc349c0/Objects/object.c#l2358.