[Python-Dev] PEP 572 and assert

Antoine Pitrou solipsis at pitrou.net
Tue Jul 17 05:05:07 EDT 2018


On Tue, 17 Jul 2018 18:56:36 +1000
Chris Angelico <rosuav at gmail.com> wrote:
> On Tue, Jul 17, 2018 at 6:50 PM, Serhiy Storchaka <storchaka at gmail.com> wrote:
> > Recently Barry shown an example:
> >
> >     assert len(subdirs := list(path.iterdir())) == 0, subdirs
> >
> > It looks awful to me. It looks even worse than using asserts for validating
> > the user input. The assert has a side effect, and it depends on the
> > interpreter option (-O). Even if subdirs is not used outside of the assert
> > *now*, it is easy to introduce an error later, and it is hard to notice it
> > if tests are not ran with the -O option regularly.
> >
> > Does PEP 572 encourages writing such code, discourages this, or completely
> > forbids?
> >  
> 
> Asserts with side effects are already a bad idea. PEP 572 makes no
> change to this. If you're putting any sort of side effects inside
> assertions, you're playing with fire.

Well, PEP 572 makes it easier to put side effects in side assertions
since you can now stuff an assignment inside an assert.  Which is what
Serhiy's / Barry's example shows.

Regards

Antoine.




More information about the Python-Dev mailing list