On Monday, December 23, 2013 12:05:22 PM UTC-5, Steven D'Aprano wrote:
> Roy Smith wrote:
> > And, yes, I know that assertions get turned off with -O (frankly, I
> > think that's a design flaw). We don't run with -O.
>
>
> Until such time as somebody decides they can speed up your code by 5% by
> running with optimizations turned on.
Well, there's lots of changes people could make that would break things. Many
of them are in the name of efficiency. [1] But, let's say they did that. We
would fall off the end of the function, return None, and the caller would end
up doing:
with None:
whatever
leaving somebody to puzzle over why the logs contained a stack dump ending in:
AttributeError: __exit__
So, here's the deeper question. Is your issue strictly that -O elides assert
statements? [2] That's a purely mechanical issue that could be solved by using
the rather more verbose:
if not condition:
raise AssertionError("....")
Would you feel differently then?
> So there's always tension between "why am I testing something that can't
> fail?" and "but what if it does?"
Trust, but verify. Especially when the thing you're verifying is your
understanding of how your own code works :-)
[1] and most of those are premature optimizations. To a first order
approximation, for us, application speed is all about database performance, and
not at all about Python code execution speed. That's a pretty good second
order approximation as well.
[2] In which case, we would just add some middleware which did:
assert "-O" not in sys.argv
--
https://mail.python.org/mailman/listinfo/python-list