2011-12-15 4 views
6

У меня есть существующее приложение, которое подключается к базе данных. Он работает под Python 2.7.None vs Empty String в Python

Приложение несовместимо с тем, как оно использует None и «» для заполнения переменных, которые не имеют значения. Я хочу сделать это согласованным и попытаться обновить код так или иначе.

Мышление как человек базы данных я думаю None, как же, как Null и предположил бы, что было бы правильным выбором для пустых переменных, но тогда это вызывает проблемы, когда приложение делает вещи, как

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

Как это вызывает ошибку, если переменная имеет тип None.

я могу сделать

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

Но это кажется излишне многословным.

Есть ли наилучшая практика для того, как это следует обрабатывать?

+0

К цитате из [The Zen of Python] (http://www.python.org/dev/peps/pep-0020/): Явный лучше, чем неявный. –

ответ

9

Вы могли бы сократить код немного, просто писать

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

Если переменная не является ни или пусто, то это эквивалентно false.

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

немного менее многословие. Он также будет обрабатывать None и пустую строку таким же образом, если это то, что вы хотите

Редактировать: Обратите внимание, что это имеет разную семантику выражения, которое вы отправили, так, как оно обрабатывает пустые строки ... т.е. в вашем выражение правой части и будет получить оценку, если переменный является пустой строкой, но в этом выражении не будет, как пустая строка вычисляет False

3

если (variable or '').upper() == 'X' или variable and variable.upper() == 'X' бы оба сокращенных, но это, конечно, не так, как компактный как исходный код. Я боюсь, что вы не будете намного лучше.

Вы могли бы сделать

def norm(s): 
    return s or '' 

... 
if norm(s) == 'X': 

но ultimatively не изменится многое также. Возможно, оригинальное различие не было настолько противоречивым вообще, а скорее очень прагматичным в контексте?