The uuid module is likely used on a huge variety of operating systems and hardware; I feel making UUID.__init__() reject values which it accepted until now would unnecessarily break existing code. While raising an exception in __init__ seems more natural and correct in theory, it is also a larger break in backwards-compatibility.
I'm specifically worried by the _windll() example in PR GH-9417, in which a non-RFC 4122 conforming UUID is created, leading to the addition of the new "strict" keyword argument so that we can disable the new check in __init__ in this case. There's a good chance that there are other such scenarios of which we're simply not yet aware.
In light of this, returning None for UUID.version, as in PR GH-9413, actually seems like a very reasonable solution. |