On Tue, Mar 19, 2019 at 09:58:55AM +1300, Greg Ewing wrote: > Oleg Broytman wrote: > > Three-way (tri state) checkbox. You have to distinguish False and > >None if the possible valuse are None, False and True. > > In that case the conventional way to write it would be > > if settings[MY_KEY] == True: > ...
For a tri-state setting, I would always check for None (or whatever third state was used) first: setting = settings[MY_KEY] if setting is None: # handle third state elif setting: # handle true state else: # handle false state If for some strange reason I required the flags to be precisely True or False rather than arbitrary truthy values, that's a *four* state flag where the fourth state is an error condition. setting = settings[MY_KEY] if setting is None: # handle third state if not isinstance(setting, bool): raise TypeError("not a bool! (but why do I care???)") if setting: # handle true state else: # handle false state > It's not a major issue, but I get nervous when I see code > that assumes True and False are unique, because things > weren't always that way. Do you also guard against True and False not being defined at all? As long as True and False have been builtins, it has been a language guarantee that they will be unique. -- Steven _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/