I have an existing application which connects to a database. It is running under Python 2.7.

The application is inconsistent in the way it uses None and "" to populate variables which do not have a value. I want to make this consistent and try to update the code to one way or the other.

Thinking as a database person I think of None as the same as Null and would assume that would be the correct choice for empty variables but then this causes problems when the application does things like

if variable.upper() == "X": #Do something 

As this raises an error if the variable is None type.

I can do

if variable is not None and variable.upper() == "X": #Do something 

But this seems unnecessarily verbose.

Is there a best practice for how this should be handled?

1

4 Answers

You could cut down on code slightly by just writing

if variable and variable.upper() == "X": #Do something 

If the variable is none or empty, then it's equivalent to False.

if variable and variable.upper() == 'X' 

is a little less wordy. It will also treat None and the empty string in the same way if that is something you want

Edit: Note that this does have different semantics to the expression you posted in the way it handles empty strings... i.e. in your expression the rhs of the and would get evaluated if variable is the empty string, but in this expression it would not as the empty string evaluates to False

if (variable or '').upper() == 'X' or variable and variable.upper() == 'X' would both be a shorthand, but it's certainly not exactly as compact as the original code. I fear you won't get much better, though.

You could do

def norm(s): return s or '' ... if norm(s) == 'X': 

but ultimatively it won't change to much also. Perhaps the original distinction was not so inconsistent at all, but rather very pragmatic in the context?

0

For those who want to distinguish None from the empty string (''), use str

def is_empty_string(value): ... return str(value) == '' ... is_empty_string(None) False is_empty_string(0) False is_empty_string(' ') False is_empty_string('') True 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy