На некоторых других языках, я знаю, интуитивный результат преобразования null в строку должен быть пустой строкой. Почему Python предназначен для того, чтобы «None» был своего рода специальной строкой? И это может привести к дополнительной работе при проверке возвращаемого значения функцииПочему python, созданный как str (None), возвращает «None» вместо пустой строки?
result = foo() # foo will return None if failure
if result is not None and len(str(result)) > 0:
# ... deal with result
pass
, если строка (None) возвращает пустую строку, код может быть короче:
if len(str(result)) > 0:
# ... deal with result
pass
Похоже, Python пытается быть многословным, чтобы сделать файлы журналов более понятными?
Это не отвечает на ваш вопрос, но это обойти вашу проблему. 'bool (None) == False', но _also_' bool ('') == False'. Поэтому на самом деле вам просто нужно проверить «если результат: # pass», поскольку «' »и« None »оба оценивают False. Я попытаюсь найти некоторые аргументы в пользу выбора 'str (None) == 'None'', но я не думаю, что это повлияет на ваш код, если вы просто проверяете, была ли возвращена правильная строка. – pswaminathan
Это только дополнительная работа, потому что условное выражение, которое вы определили, неудобно: «обрабатывать результат только если это не None или его строковое представление не пусто».Используйте более обычный способ проверки (например, предложенный @pswaminathan), и проблема уходит. – vanza
Если 'foo' возвращает' None' в случае отказа, вам нужно проверить 'None'. В вашем примере все, чье строковое представление пуст, по-видимому, обрабатывается так же, как «Нет», но нет особых причин, почему это должно быть поведение по умолчанию. Вопрос в том, почему вы используете «длину str (x)» как диагностику для чего-либо? – BrenBarn