Problem with if statements checking True
Correct me if I'm wrong, but shouldn't the following statement work based on if my variable is true or false?
if twitter_mode: print "Hello" else: pass
Exactly. If the
ifcondition is true, the first block is executed, otherwise the second (
else) block. The condition doesn't need to be exactly
True, it needs to be an object that is considered a true value. (To get the truth value of an object, use
boolbehaves exactly the same as an implicit conversion in an
ifstatement condition.) Most objects are true, the most important cases of false objects are
False, numbers that are exactly zero (like
decimal.Decimal("0")), and containers that are empty (like
By the way, if your
elseblock is empty, just remove it.
If there is a specific piece of actual code that behaves differently than you'd expect, then please post that code.
To address your points:
- I meant to have my
elseblock empty. I will fill later, (as this is an inner function)
- I know how
ifstatements work - but
twitter_modeis a True or False variable and my code above isn't working.
See the full WIP code here.
- I meant to have my
Try removing twitter_mode from the if statement and replacing it with true or false. I think your problem exists because twitter_mode is being set incorrectly.
@Webmaster4o Already had tried this in the initial debugging, but I also think there is an issue the way the variable is created- So I'm going to set up
config.pyand import that. I think it'll make things easier in the long run anyway.
Watch out for the line
twitter_mode = str(settings['twitter'])because
bool(False) != bool('False').
Try removing the local copies of
config.feedand always use the attributes of
configinstead. That way you won't have any issues with the local copy being different from the
@ccc Already took care of it ;) accidentally did this somehow..
@dgelessus Could you explain more in depth? Not sure what you mean.
Near the beginning of your gist, you have these two lines:
news_url = config.feed twitter_mode = config.twitter_mode
What you're doing here is you're assigning the current values of
config.twitter_modeto the local (well, actually global, from the perspective of the current module) variables
twitter_mode. Although the variables' values are the same, the variables themselves are not linked in any way. If you change
config.twitter_mode, the global variable
twitter_modedoesn't change, and vice versa.
Further on in your
settings_actionmethod, you declare
twitter_modeas global, but never assign to them - instead you assign to
config.twitter_mode. Now the variables from
configand the current module are no longer in sync. To avoid this issue, simply remove the globals
twitter_mode, and always use
@dgelessus Gotcha. Thanks for explaining that for me. It's been a long day...
Would changing the variables be like writing to a file but writing over the current .py file?
Not sure what you mean exactly. If you assign something to an attribute of the
configmodule, you don't modify the actual source file. The changes are as temporary as any other variable. The important part is that you store your data in a single place (the
configmodule) and not under multiple separate names.
Yes, edit it like any other file.