19

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 4

17

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.

Sign up to request clarification or add additional context in comments.

Comments

4
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

Comments

4

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?

Comments

4

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.