I liked your idea so much back when you suggested it that I implemented it in our sitecustomize.py back when we were using 3.8, and added a check to our lint tools to require that the 'strict=' parameter be present in all uses of 'zip'.  We found a couple of silent bugs almost immediately, so thank you!

On Thu, Dec 1, 2022 at 11:38 AM Ram Rachum <ram@rachum.com> wrote:
Reviving this thread 2.5 years after I started it just to share this satisfying moment. I was just spending a few hours furiously coding on my research using Python 3.10, and when I ran my code I got this traceback:

  File "/home/ramrachum/.venvs/ray_env/lib/python3.10/site-packages/ray/rllib/algorithms/algorithm.py", line 1993, in log_result
    self.callbacks.on_train_result(algorithm=self, result=result)
    │                                        │            └ {'custom_metrics': {}, 'episode_media': {}, 'num_recreated_workers': 0, 'info': {'learner': {'policy_robot': {'learner_stats': {...
    │                                        └ PPO
    └ PPO
  File "/herring/nichos/nichos/snare/__init__.py", line 150, in on_train_result
    robot_move_by_state = get_move_by_state(
  File "/herring/nichos/nichos/snare/__init__.py", line 75, in get_move_by_state
    return dict(zip(states, moves, strict=True))
                    │       └ array([0, 1, 0, ..., 1, 0, 1])
                    └ <itertools.chain object at 0x7f08dc157610>
ValueError: zip() argument 2 is longer than argument 1

It took a few seconds for me to understand... "Ah... This error is my error" :)


On Mon, Apr 20, 2020 at 8:42 PM Ram Rachum <ram@rachum.com> wrote:
Here's something that would have saved me some debugging yesterday:

    >>> zipped = zip(x, y, z, strict=True)

I suggest that `strict=True` would ensure that all the iterables have been exhausted, raising an exception otherwise.

This is useful in cases where you're assuming that the iterables all have the same lengths. When your assumption is wrong, you currently just get a shorter result, and it could take you a while to figure out why it's happening. 

What do you think? 
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-leave@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/DPQEIIOAEGJKIVDHTAKQ6CJPCGS7C5G7/
Code of Conduct: http://python.org/psf/codeofconduct/