предложение try vs if if else

Часто я сталкиваюсь с случаями, когда я нахожу как аргументы if-else и try-except могут быть использованы для решения проблемы. В результате у меня есть путаница, которая решает (и оправдывает) использование конкретного предложения для выполнения поставленной задачи.
Например, рассмотрим тривиальную ситуацию:

In []: user = {"name": "Kshitij", "age": 20 }

# My motive is to print the user email if it is available.
# In all other cases, a warning message needs to be printed

# Method-01 : Using try clause
In []: try:
  ...:     print(a["email"])
  ...: except KeyError:
  ...:     print("No EMAIL given")
  ...:     
No EMAIL given

# Method-02 : Using if-else clause
In []: if "email" in a:
           print(a["email"])
  ...: else:
  ...:     print("No EMAIL given")
  ...:     
No EMAIL given

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

-1
источник поделиться
4 ответа

try/catch и if/else не являются взаимозаменяемыми. первая предназначена для обнаружения ошибок, которые могут быть выброшены. нет, если выражение может это сделать. если /else для проверки, является ли условие истинным или ложным. ошибки, выброшенные в блок if/else, не будут пойманы, и программа выйдет из строя.

+1
источник

Вы должны использовать исключения, если этот случай является исключением, а не нормальным случаем.

0
источник

if/then: для внутреннего управления потоком приложений. Ошибки вряд ли будут смертельными

против

try/except: для системных вызовов и вызовов API, где состояние получателя является внешним по отношению к коду. Неудачи, вероятно, будут фатальными и должны быть обработаны явно

0
источник

Если вы ищете "Pythonic", ни один из них не является.

print a["email"] if "email" in a else "No EMAIL given"

Теперь это Pythonic. Но вернемся к вопросу: во-первых, вы решаете, что делать - я не знаю никаких письменных соглашений между этими двумя. Но, как я вижу:

if-else используется в основном для обнаружения ожидаемого поведения - я имею в виду, если "электронная почта" не находится в a, она может быть определена. Поэтому мы будем использовать if-else.
Примером может служить ваш код.

Но, например, если мы хотим проверить, содержит ли строка числовое значение, мы try преобразовать его в число. Если это не сработало, то это немного сложнее предсказать, используя инструкцию if, поэтому мы будем использовать try-except.
Вот краткий пример:

def is_numeric(string):
    try:
        a = float(string)
        return True
    except:
        return False
  • конечно, есть лучший способ проверить, является ли строка числовой, это просто пример использования try-except.
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос