New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RFE: change bool(0.0) to evaluate as True #65054
Comments
The rationale for making this change is that the current behaviour converts a stylistic problem in checking values against a sentinel via "bool(value)" instead of "value is not None" into a subtle data driven behavioural bug that only occurs exactly at 0x0.0p+0. If someone wants to write the patch to deprecate this behaviour in Python 3.5 (reporting a deprecation warning whenever midnight is interpreted as False, perhaps suggesting the use of "is" or "is not" instead), and then actually change the behaviour in 3.6, I don't believe we should actively oppose them from doing so. See also issue bpo-13936. |
Being passive aggressive is pointless, if you disagree then discuss on the actual issue or on the mailing list thread. Opening up random issues because you're mad just makes you look like a child. |
I thought literal copying was enough of a hint to humor without a smiley in the title. |
Excellent idea! But then we should change bool(0.1) to be False too ;-) |
Alexander, my goal is to flip the default assumption in the time discussion. It is clear from the documentation that the current behaviour is intentional, but there is no concrete *use case* given for it. This is in stark contrast to the other types where treating zero or an empty container differently is quite common, and hence generally unsurprising. This has resulted in a problem, since the default for most types is that all instances are true, and users mistakenly assume that assumption will hold for datetime.time objects. This is particularly likely for newer users that don't have experience with lower level models of time of day as "seconds since midnight" (which is the mental model where the current behaviour makes sense, and the most plausible rationale for its origins). |
I realise this was opened as a joke, but I actually consider this suggestion to be unridiculous. I've never felt comfortable with code that does "if x" rather than "if x != 0.0" for x a float. What really makes this a no-go in Python is the equality between floats and ints, and then between ints and bools. If we want to maintain the invariant that x == y implies bool(x) == bool(y) then we end up making bool(0) and bool(False) true, the latter of which is clearly ridiculous. So not in Python, but perhaps in some other Python-like language with a notion of 'boolean context'. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: