2016-12-20 2 views
4

У меня нет контроля над библиотекой python, которая бесполезно вызывает определенное исключение.Есть ли способ «освободить» исключение в python?

Есть ли способ обработать его с помощью подкласса Except «плацебо»? т.е.

class MyException(Exception): 
    def __init__(self, value): 
     # literally do nothing. return to program flow 
     pass 
+3

Вы просто хотите, чтобы поймать исключение?Вы не можете предотвратить исключение исключения из-за изменения инициализатора (который влияет только на исключение как на значение, а не на отмену 'raise'). –

+2

Поскольку у вас есть определенное исключение, вы можете обработать исключение, указав класс исключения в предложении except блока try. –

+0

Я мог бы. Я надеялся не обернуть все вызовы и переопределить класс исключений или что-то еще. Я хочу «отменить рейз» – Jared

ответ

5

поднимает определенного исключения и

У вас есть определенного исключения, вы должны обработать исключение, указав класс исключений в исключении пункта о наличии try-except блока.

плацебо подход (т.е. except Exception...) только собирается молчать другие исключения, так как исключения, как правило, происходят из Exception или не будет работать вообще (с новым классом исключений) с поднятым исключением, по-видимому, не получено из нового класса исключений.


Имейте в виду:

Ошибки никогда не должны проходить молча, если явно не замолчали

Так что я не понимаю, почему вы хотели бы отменить поднятая исключение без try-except. Исключение не было создано ни для чего.


Если вы надеетесь избежать использования try-except каждый раз, когда функция из этой библиотеки вызывается, то вы могли бы написать функцию-оболочку, которая оборачивает вызов с try-except, а затем использовать новую функцию в дальнейшем ,

from somelib import func 
from somelib import SomeException 


def wrapper_func(*args, **kwargs): 
    try: 
     func(*args, **kwargs) 
    except SomeException: 
     pass 
+0

Кроме того, это отличается от «отмены» исключения. Используя вышеизложенное, очень строгая строка после исключения для рейса * не * выполняется. – Jared

+0

@ Jared Вы, кажется, подрываете причину, по которой исключение существовало в первую очередь. Как бы вы отменили * сказать «ZeroDivisionError»? –

0

Хотя другой ответ правильный, если вы имеете дело с каким-то странным/модулем багги вы можете дать fuckitpy попробовать!

Обратите внимание, что это, как правило, очень плохая идея, чтобы позволить исключениям пройти молча.

Во всяком случае, основной способ использования fuckitpy является (цитирую из документации):

import fuckit 
#import some_shitty_module 
fuckit('some_shitty_module') 
some_shitty_module.some_function() 

также из документации:

все еще получаю ошибки? Цепные звонки. Этот модуль похож на насилие: если он не работает, вам просто нужно больше.

import fuckit 
fuckit(fuckit('some_shitty_module')) 
# This is definitely going to run now. 
some_shitty_module.some_function() 

fuckitpy (GitHub): https://github.com/ajalt/fuckitpy