Even if datetime's or replace()'s *first* parameter would be 3-state None|True|False; the internal flag can still be 2-state True|False
So please take this to the following thread instead (but after reading all of it first ;-) ):
PEP-495 - Strict Invalid Time Checking
Actually a follow-up thread "Strict Invalid Time Checking: an idea for another PEP" may be a better (and shorter!) fit.