[Python-Dev] (#19562) Asserts in Python stdlib code (datetime.py) (original) (raw)

Terry Reedy tjreedy at udel.edu
Sat Nov 16 02:51:30 CET 2013


http://bugs.python.org/issue19562 propose to change the first assert in Lib/datetime.py assert 1 <= month <= 12, month to assert 1 <= month <= 12,'month must be in 1..12' to match the next two asserts out of the 53 in the file. I think that is the wrong direction of change, but that is not my question here.

Should stdlib code use assert at all?

If user input can trigger an assert, then the code should raise a normal exception that will not disappear with -OO.

If the assert is testing program logic, then it seems that the test belongs in the test file, in this case, test/test_datetime.py. For example, consider the following (backwards) code.

_DI4Y = _days_before_year(5)

A 4-year cycle has an extra leap day over what we'd get from pasting

together 4 single years.

assert _DI4Y == 4 * 365 + 1

To me, the constant should be directly set to its known value. _DI4Y = 4*365 + 1. The function should then be tested in test_datetime. self.assertEqual(dt._days_before_year(5), dt._DI4Y)

Is there any policy on use of assert in stdlib production code?

-- Terry Jan Reedy



More information about the Python-Dev mailing list