Ответ 1
Пустые строки считаются ложными.
if string:
# String is not empty.
else:
# String is empty.
В 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""
кажется слишком жестко закодированной для меня. Но если это лучший способ сделать это, пусть будет так.:) Спасибо за любую помощь, которую вы можете предложить.
Пустые строки считаются ложными.
if string:
# String is not empty.
else:
# String is empty.
Вы никогда не захотите использовать is
для чего-либо, что не гарантируется ничем. Проверьте длину возвращаемого значения и если это экземпляр unicode
.
Мне нужно бросить вызов вашему первому утверждению:
# 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
Проверьте, что?
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
, как обычно.
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)