Оператору python не нужен оператор условия? - PullRequest
0 голосов
/ 04 ноября 2019

Я видел фрагмент кода, который, по моему мнению, является недопустимым, но пока не уверен.

Это не совсем тот же код, но я стараюсь сохранить оригинал как можно больше.

def validate_check(string):
    try:
        len(string) > 0
        # do something
    except Error:
        # do something

Не должен ли len(string) > 0 быть оператор условия? Или это какой-то синтаксис Python?

Ответы [ 3 ]

4 голосов
/ 04 ноября 2019

Не обязательно ли len(string) > 0 быть в выражении условия?

Нет, но приведенный вами пример не имеет большого смысла.

Вот другая, похожая конструкция, которая может помочь:

x = input()

try:
    10 / int(x)
except ZeroDivisionError:
    print("Can't divide by zero")
except ValueError:
    print("Can't convert to int")

Результат 10 / int(x) вычисляется (чтобы увидеть, вызовет ли он ошибку), но результат этого вычисления отбрасывается.

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

1 голос
/ 04 ноября 2019

Если строка None, функция len вызовет ошибку.

Возможно, именно поэтому ваша функция названа validate_check.

1 голос
/ 04 ноября 2019

Это правильный синтаксис. Но если вы напишите:

len(string) > 0
print("hi")

, то "hi" будет напечатано независимо от длины строки. Единственное отношение, которое имеет это утверждение, состоит в том, что оно будет выдавать исключение, когда либо string не имеет длины, либо результат len(string) не сопоставим с 0.

Что делает автор кода, так этоизбегая более сложной проверки if isinstance(string, str) and string: (или, я думаю, if isinstance(string, collections.abc.Sized) and len(string) > 0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...