2015-11-06 4 views
0

У меня есть пользовательский InvalidError, и я хочу, чтобы моя функция обрабатывала два типа ошибок: один - InvalidError, а все остальные ошибки. Я пытался таким образом:python stop exception pass

try: 
    a = someFunc() 
    if a: 
     # do things 
    else: 
     raise InvalidError('Invalid Error!') 
except InvalidError as e: 
     return "Invalid" 
except Exception as ex: 
     return "Other" 

Но, кажется, я буду получать Other либо образом. Как я могу правильно выполнять свои функции?

+0

Определили ли вы InvalidError как класс, расширяющий класс Exception? –

+0

Возможный дубликат [Вручную (исключение) в Python] (http://stackoverflow.com/questions/2052390/manually-raising-throwing-an-exception-in-python) – JasmineOT

ответ

0

Можете ли вы рассказать нам, как вы создали свой класс InvalidError? Это работает.

class InvalidError(Exception): 
    pass 

>>> try: 
... raise InvalidError("dsfsdf") 
... except InvalidError as my_exception: 
... print "yes" 
... except Exception as e: 
... print "No" 
... 
yes 
0

Один из способов сделать это - создать класс менеджера контекста. Внутри менеджера contect вы можете игнорировать любую ошибку, которая вам нравится,

E.g.

class ctx_mgr:

def __enter__(self): 
    cm = object() 
    return cm  

def __exit__(self, exc_type, exc_value, exc_tb): 
    return (exc_type == InvalidError) 

with ctx_mgr: a = someFunc()