Форум сайта python.su
Python_newbie13
Вот вы сами себе и ответили.
Когда вы не знаете заранее, что может произойти исключительная ситуация (заранее неизвестно какие действия будет выполнять прогирамма), то перехват исключений хорошая практика. Когда вы знаете, что имеено происходит, то ваша задача избежать исключтительных ситуаций. Другими словами, использовать механизм исключений допустимо для ситуаций, когда вы не можете предсказать последствия вызова кода, и недопустимо использовать его для управления потоком выполнения.
Так делать можно
def calculate(a, b): func = get_random_func() try: res = func(a, b) except Exception: ....
def calculate(a, b, z): try: c = a / (b - z) except ZeroDivisionError: try: c = math.sqrt(a + b) except ValueError: c = 0
Офлайн
Спасибо теперь понятно
Офлайн
RodegastНет. Это сказала генерал армии США. Разработчика кобола.
Это точно из “дзена”? Я не помню что там было что-то такое написано.
Офлайн
> Нет. Это сказала генерал армии США
Ага, тогда лучше на это забить.
Офлайн
RodegastПардонте, дейстивтельно перепутал, это не из дзена, но всеже.. https://docs.python.org/3/glossary.html#term-eafp
Это точно из “дзена”? Я не помню что там было что-то такое написан
FishHookНу вопервых, это всего лишь ИМХО , а во вторых пример уж очень обобщенный:
и я хоть убей не понимаю, почему исключения тут - боллее питоник. Хотите быть конкретными - давайте конкретные примеры. А в предложенном варианте - не убедительно.
try: проверка корня except ZeroDivisionError: удалить корень из списка
FishHook
использовать механизм исключений допустимо для ситуаций, когда вы не можете предсказать последствия вызова кода, и недопустимо использовать его для управления потоком выполнения.
[code python][/code]
Офлайн
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:\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
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
Отредактировано FishHook (Июль 9, 2020 18:26:36)
Офлайн
А если в вашем примере я хочу передать пользователю, например, на какой операций была произведена ошибка?
Отредактировано Python_newbie13 (Июль 10, 2020 18:08:32)
Офлайн
Python_newbie13В моем примере нет опреций, в которых “произведена ошибка”
А если в вашем примере я хочу передать пользователю, например на какой операции была произведена ошибка?
Офлайн