Terry J. Reedy added the comment:
I agree that my extreme, strawman-ish, proposal, was, well, too extreme. Here
is a more realistic proposal similar to David's.
if isinstance(choices, range) and len(choices) > 50:
choice_txt = range_rep(choices) # details to be determined
choice_txt = <iterated version of choices as now>
except TypeError: # because choices not iterable
choice_txt = repr(choices) # can be anything for custom class
Then display help or error message.
If someone passes a non-(x)range iterable with 1000s of choices, I am willing
to say they deserve what they asked for, once that the docs make clearer that
such collections will be displayed in full. Any iterable container too large to
display in full can be wrapped as a non-iterable container. ('Container' means
that 'in' works.)
def __init__(self, container, description):
self.container = container
self.description = description
def __contains__(self, item):
return item in self.container
The description could point one to a file or doc that has an explicit list.
If such a listing enumerates the items, the program arg could instead be an int
in the appropriate range. Then the program would look up the actual arg. Ranges
*are* special because items from any finite enumerated collection can be
replaced, for input, by the corresponding int in the enumerated range. They are
therefore worth special attention in help and error displays.
Python tracker <rep...@bugs.python.org>
Python-bugs-list mailing list