That's a good scenario, but it doesn't traceback with the SafeGenerator 
implementation above.

args = SafeGenerator(iter(['mkdir.py', 'dir']))
progname = next(args)
mandatory_arg = next(args)
# Generator is empty, but "we don't know it yet" (no StopIteration), so 
is_exhausted == False
for arg in args:
     print('optional arg', next(arg))
# StopIteration is raised, so is_exhausted == True. Still no traceback.

# Added mistake:
print('Parsed args:', ' '.join(args))
# ValueError: can't iterate over an already exhausted generator

And even if there are rare false positives, I'd still love a flag to enable 
this warning. I hit this bug every few weeks and it's a pain to troubleshoot. 
Worse than strays NaN, None, or Javascript's "undefined", because logging it 
shows a normal-looking empty list.

BoppreH

On Mon, Jun 12, 2023, at 10:11 PM, Barry wrote:
> 
> 
> > On 12 Jun 2023, at 16:55, BoppreH via Python-ideas 
> > <python-ideas@python.org> wrote:
> > 
> > Then the empty list creates hard-to-track bugs. I'm familiar with the 
> > iterator protocol and why the behavior above happens, but couldn't it be 
> > prevented?
> 
> I don’t think so. It is not always a bug that an iterator is empty.
> For example this pattern:
> 
> args = iter(sys.argv)
> progname = next(args)
> mandatory_arg = next(args)
> for arg in args:
>      print(‘optional arg’, next(arg))
> 
> Your proposal will traceback for the for loop if there are no optional args.
> 
> Barry
> 
> 
> 
> 
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/2Y4PLP52UWGPGWCRYH5WENLXTLRQBQEO/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to