#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 вы можете передавать ошибки значений в список и вызывать их, когда они не пусты. Я обновил код, чтобы он вызывал несколько исключений.