Подтвердить что ты не робот

Лучший способ выполнить тест "не один" в Python для обычной и Unicode пустой строки?

В Python 2.7 я пишу класс, который вызывает функцию в API, который может или не может возвращать пустую строку. Кроме того, пустая строка может быть unicode u"" или не-unicode "". Мне было интересно, что лучший способ проверить это?

Следующий код отлично подходит для пустой строки, но не пустой строки юникода:

class FooClass():
    string = ...
    string = might_return_normal_empty_string_or_unicode_empty_string(string)

    # Works for normal empty strings, not unicode:
    if string is not None:
        print "string is not an empty string."

Вместо этого мне пришлось бы написать его так, чтобы он работал для unicode:

class BarClass():
    string = ...
    string = might_return_normal_empty_string_or_unicode_empty_string(string)

    # Works for unicode empty strings, not normal:
    if string is not u"":
        print "string is not an empty string."

... и вот так, чтобы заставить его работать как для пустых строк в un-unicode, так и для unicode:

class FooBarClass():
    string = ...
    string = might_return_normal_empty_string_or_unicode_empty_string(string)

    # Works for both normal and unicode empty strings:
    if string is not u"" or None:
        print "string is not an empty string."

Является ли третий способ лучшим способом сделать это, или есть лучший способ? Я спрашиваю, потому что запись u"" кажется слишком жестко закодированной для меня. Но если это лучший способ сделать это, пусть будет так.:) Спасибо за любую помощь, которую вы можете предложить.

4b9b3361

Ответ 1

Пустые строки считаются ложными.

if string:
    # String is not empty.
else:
    # String is empty.

Ответ 2

Вы никогда не захотите использовать is для чего-либо, что не гарантируется ничем. Проверьте длину возвращаемого значения и если это экземпляр unicode.

Ответ 3

Мне нужно бросить вызов вашему первому утверждению:

# Works for normal empty strings     <-- WRONG
if string is not None:
    print "string is not an empty string."

В Python 2.7.1 "" is not None оценивается как True - поэтому string="" приводит к string is not an empty string (что, безусловно, есть!).

Зачем вообще вставлять None?

s = random_test_string()
s = API_call(s)

if len(s):
    # string is not empty
    pass

Ответ 4

Проверьте, что?

if s is None:
    print "s is None"
else:
    if isinstance(s, unicode):
        print "s is unicode, %r" % s
    else:
        print "s is bytes, %r" % s

    if s:
        print "s is not empty"
    else:
        print "s is empty"

Просто сначала проверьте None, как обычно.

Ответ 5

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

None является допустимым и совершенно уникальным значением, которое может иметь строка.

Я новичок в Python, поэтому я еще не полностью разбираюсь в "правильном" использовании None. Мое его наиболее частое использование заключается в инициализации строк и списков. Если мой код когда-либо попадает в случай, когда я пытаюсь сделать что-то со строкой или списком, который мой код специально не задал для значения, я хочу знать об этом. Я использую его как безопасную сеть.

if my_string is '': print('My string is NULL')
elif my_string is None : print('My string.... isn\'t')
else: print('My string is ' + my_string)