#python
#python
Вопрос:
У меня есть некоторая функция, такая как sumssqure номера диапазона n, если n является целым числом, оно должно возвращать значение суммы. Если n не целое число, должно возвращаться с некоторой строкой. Он должен использовать ошибку повышения значения («Извините, n должно быть целым числом!»). Мои коды могут хорошо работать с любым целым числом n, но возникают проблемы, когда n не является целым числом. Я не знаю, как это исправить. Большое спасибо.
def sumsquares(n):
try:
return sum(i**2 for i in range(0,n 1))
except ValueError as ve:
err = str(ve)
assert err == "Sorry, n must be a whole number!"
sumsquares(2.2)
Комментарии:
1.
assert
Не будет работать. Если ошибки нет,err
значение не установлено, и при попытке сравнить оно выдаст сообщение об ошибке. И если есть ошибка,err
будет сообщение об ошибке, а не строка, с которой вы сравниваете.2. Почему вы просто не проверяете входные данные, чтобы увидеть, является ли это целым числом?
3. Части except и assert взяты из инструкции, похоже, я должен добавить этот код внутрь. Может быть, я добавляю неправильно? Потерял разум.
Ответ №1:
Просто верните нужную строку в except
блоке.
Кроме того, исключение, возникающее, когда вы указываете неправильный тип аргумента range()
, — это TypeError
, not ValueError
.
def sumsquares(n):
try:
return sum(i**2 for i in range(0,n 1))
except TypeError as ve:
return "Sorry, n must be a whole number!"
Комментарии:
1. Большое спасибо. Я попробовал ваш код, но потерпел неудачу. Если я удалю «ValueError как ve:», он работает хорошо. Как может получиться: ValueError: Извините, n должно быть целым числом! Большое спасибо!
2. Исключение должно быть
TypeError
.
Ответ №2:
Если n является типом с плавающей запятой, вы можете добавить простую проверку и вернуть следующее
if n%1 != 0:
return 'Float type'