Вместо пользовательской ошибки выводится ""
Делал программу, которая выбирает случайное число в заданном диапазоне с заданной точностью. Мой код:
import random
class PreciseError(Exception):
def __init__(self, prec):
self.prec = prec
def __str__():
return f'Expected integer or "max" precise, not {self.prec}'
def choose(_min, _max, precise = 1):
try:
if precise == "max" or precise == int(precise):
precise = 15
except:
raise PreciseError(precise) from None
# по идее, должен выводиться текст ошибки, но выводится "<exception str() failed>"
exit()
if _min < _max:
_min *= 10 ** precise
_max *= 10 ** precise
(_min, _max) = (int(_min), int(_max))
number = random.randint(_min, _max)
number /= 10 ** precise
if float(number) == int(number):
number = int(number)
if precise <= 0 and float(number) != int(number):
number = round(number)
return number
r = choose(1, 10, "min") # такой precise не допустим, должна вывестись ошибка
print(r)
Объясните, пожалуйста, почему это происходит и как это исправить?
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
А добавить аргумент self вы часом не забыли?
def __str__(self):
return f'Expected integer or "max" precise, not {self.prec}'
Собственно по этому и вываливается ошибка <exception str() failed>, потому что метод __str__() не может быть вызван без аргументов.
Собственно все работает, если добавить __str__(self):
PreciseError: Expected integer or "max" precise, not min
[Program finished]