<div dir="ltr">Thank you for your explanation!</div><div hspace="streak-pt-mark" style="max-height:1px"><img alt="" style="width:0px;max-height:0px;overflow:hidden" src="https://mailfoogae.appspot.com/t?sender=abmlrb2xhc3J2YW5kZXJob29mQGdtYWlsLmNvbQ%3D%3D&type=zerocontent&guid=5ea069b5-3b8f-4ba7-8fcf-5fbd0d6843ff"><font color="#ffffff" size="1">ᐧ</font></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 18, 2018 at 11:00 PM, Guido van Rossum <span dir="ltr"><<a href="mailto:guido@python.org" target="_blank">guido@python.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On Thu, Jan 18, 2018 at 7:51 PM, Nikolas Vanderhoof <span dir="ltr"><<a href="mailto:nikolasrvanderhoof@gmail.com" target="_blank">nikolasrvanderhoof@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px">I sometimes wish that Python included a richer set of assertions rather</span><br style="font-size:12.8px"><span style="font-size:12.8px">than just a single `assert` keyword. Something like Eiffel's concept of</span><br style="font-size:12.8px"><span style="font-size:12.8px">pre-conditions, post-conditions and invariants, where each can be</span><br style="font-size:12.8px"><span style="font-size:12.8px">enabled or disabled independently.</span></blockquote><div><br></div></span><div>Has something like this been proposed for Python before?</div><div>This seems to align more with the intended use of assert that's been pointed out in this thread.</div><div>In what case though would one want to disable some but not all of these pre, post, or invariant assertions?</div></div></blockquote><div><br></div></span><div>Oh, many times, starting in the late '90s IIRC (Paul Dubois was a big fan).</div><div><br></div><div>The problems are twofold: (a) it would require a lot of new keywords or ugly syntax; and (b) there would have to be a way to enable each form separately *per module or package*. Eiffel solves that (AFAIC) through separate compilation -- e.g. a stable version of a library might disable invariants and post-conditions but keep pre-conditions, since those could be violated by less mature application code; or a mature application could disable all checks and link with optimized library binaries that also have disabled all checks. I'm sure other scenarios are also viable.</div><div><br></div><div>But that solution isn't available in Python, where command line flags apply to *all* modules being imported.</div><div><br></div><div>(Note: even if you have a solution for (b), getting past (a) isn't so easy. So don't get nerd-sniped by the solution for (b) alone.)</div></div><span class="HOEnZb"><font color="#888888"><div><br></div>-- <br><div class="m_-8101893043783532277gmail_signature" data-smartmail="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div>
</font></span></div></div>
</blockquote></div><br></div>