PEHDOM
а во вторых пример уж очень обобщенный
Вот я о том и говорю, нужен реальный пример
PEHDOM
а если там будет каканить формула позаковыристее где операций деления больше двух, то тут уже замаешься проверять, хотя опять же все ситуативно.
если у нас есть сложная формула, то хорошим стилем будет эту формулу декомпозировать на более простые операции. Хотя бы для того, чтобы понимать, в каком именно месте случился ZeroDivision.
x = 1
y = 2
z = 3
k = 0
def calc():
return x + y ** 3 / ((x - 2 / z) + 1 / k ** 2)
calc()
И теперь у тебя cлучился ZeroDivision. В какой операции деления?
Сообщение об ошибке не поможет найти проблему
C:\Python27\python.exe D:/tests/test.py
Traceback (most recent call last):
File "D:/tests/test.py", line 10, in <module>
calc()
File "D:/tests/test.py", line 8, in calc
return x + y ** 3 / ((x - 2 / z) + 1 / k ** 2)
ZeroDivisionError: integer division or modulo by zero
Process finished with exit code 1
Нормальный человек напишет вот так, если он не враг самому себе
def calc():
a = x - 2 / z
b = 1 / k ** 2
c = y ** 3
d = a + b
return x + c / d
calc()
теперь мы знаем, какая именно операция лажанула
C:\Python27\python.exe D:/tests/test.py
Traceback (most recent call last):
File "D:/tests/test.py", line 14, in <module>
calc()
File "D:/tests/test.py", line 9, in calc
b = 1 / k ** 2
ZeroDivisionError: integer division or modulo by zero
И тут у меня возникнет вопрос, а нахрена все это оборачивать в try…except? Мне кажется, код здорового человека будет выглядеть как то так
def calc():
if z == 0:
raise FormulaError('z is 0')
if k == 0:
raise FormulaError('k is 0')
a = x - 2 / z
b = 1 / k ** 2
c = y ** 3
d = a + b
if d == 0:
raise FormulaError('d is 0')
return x + c / d