Как вызывать ошибки на основе условия

#python

#python

Вопрос:

Какой наилучший способ вызывать ошибки в python?

Я думал:

 if input = 14:
    raise valueError('error')
  

Спасибо!!

Комментарии:

1. помимо того факта, что это должно быть ValueError (с большой буквы V), я не уверен, что понимаю, в чем ваш вопрос — у вас, кажется, есть свое собственное решение

2. В чем именно, по-видимому, заключается ваша проблема здесь. То, что вы написали, похоже, уже является ответом.

3. afaik, вы можете вывести только одно сообщение об ошибке. Вам нужно будет написать условие, которое проверяет все, а затем выбирает, какое сообщение об ошибке печатать. Если вы действительно хотите напечатать оба, вам придется сделать что-то вроде ValueError('error' 'error1') но это в основном выдает одну ошибку, которая представляет собой строку из обоих сообщений

4. Вы уже это делаете. Вы тестируете одно условие (тип int), и если это не ошибка int => raise, в противном случае вы переходите к следующему условию (диапазон). Это просто некоторые неправильные синтаксические элементы, но последовательно ваш код правильный.

Ответ №1:

Это довольно просто. Вы можете использовать isinstance(<value>,<type>) для проверки типа и не забыть изменить valueError на ValueError .

 input = 0

if not isinstance(input,int):
    raise ValueError('error')
elif input < 5555 or input > 11111:
    raise ValueError('error1')
  

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

 input = 'g'

exceptions = []
if not isinstance(input,int):
    exceptions.append(ValueError('error'))
    exceptions.append(ValueError('error1'))
elif input < 5555 or input > 11111:
    exceptions.append(ValueError('error1'))

if exceptions != []:
    raise Exception(exceptions)
  

Вы также можете сделать его более эффективным в вычислительном отношении, используя try-exept , как предложено @chepner

 input = 'g'

exceptions = []

try:
    _ = int(input)
    if input < 5555 or input > 11111:
        exceptions.append(ValueError('error1'))
except ValueError:
    exceptions.append(ValueError('error'))
    exceptions.append(ValueError('error1'))

if exceptions != []:
    raise Exception(exceptions)
  

Комментарии:

1. Используйте is_instance экономно. Было бы лучше просто попытаться сделать input int . Если int(input) возникает ошибка, либо перехватите ее и создайте свою собственную ошибку, либо оставьте исходную ошибку неперехваченной.

2. @chepner Ты прав. isinstance производительность довольно низкая. Тем не менее, я обычно предпочитаю сокращать код для менее дорогостоящей в вычислительном отношении задачи, чтобы оператору было легче понять.

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