2015-12-16 3 views
1

У меня есть ряд пользовательских исключений, созданных для моего проекта Django. как такЗахват всех пользовательских исключений Python

errors.py

# General Exceptions 

class VersionError(Exception): 
    pass 

class ParseError(Exception): 
    pass 

class ConfigError(Exception): 
    pass 

class InstallError(Exception): 
    pass 

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

try: 
    do something wrong 
except <custom errors>, exc: 
    print exc 
except: 
    print "Gen 

ответ

0

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

# General Exceptions 
class MyAppError(Exception): 
    pass 

class VersionError(MyAppError): 
    pass 

class ParseError(MyAppError): 
    pass 

class ConfigError(MyAppError): 
    pass 

class InstallError(MyAppError): 
    pass 

С этим наследованием три вы можете просто перехватывать все исключения типа MyAppError.

try: 
    do_something() 
except MyAppError as e: 
    print e 
0

Вы должны сделать общий базовый класс для всех пользовательских исключений, и расслышал.

1

Вы должны определить базовый класс пользовательских маркеров для пользовательских исключений:

# General Exceptions 
class MyException(Exception): 
    """Just a marker base class""" 

class VersionError(MyException): 
    pass 

class ParseError(MyException): 
    pass 

class ConfigError(MyException): 
    pass 

class InstallError(MyException): 
    pass 

С этой модификации, вы можете легко сказать:

try: 
    do something wrong 
except MyException as exc: 
    print exc 
except: 
    print "Some other generic exception was raised" 

(Кстати, вы должны использовать рекомендуемый except Exception as ex синтаксис вместо except Exception, ex, см. this question)

0

Создайте собственное базовое исключение и выведите все другие пользовательские исключения формируют эту базу execption:


class CustomBaseException(Exception): 
    pass 

# General Exceptions 

class VersionError(CustomBaseException): 
    pass 

class ParseError(CustomBaseException): 
    pass 

class ConfigError(CustomBaseException): 
    pass 

class InstallError(CustomBaseException): 
    pass 

Затем вы можете сделать


try: 
    do something wrong 
except CustomBaseExecption, exc: 
    print exc 
except: 
    print "Gen 
0

Вы могли бы сделать кортеж исключений:

my_exceptions = (VersionError, 
       ParseError, 
       ConfigError, 
       InstallError) 

Использование:

except my_exceptions as exception: 
    print exception 

например:

>>> my_exceptions = (LookupError, ValueError, TypeError) 
>>> try: 
...  int('a') 
... except my_exceptions as exception: 
...  print type(exception) 
...  print exception 
<type 'exceptions.ValueError'> 
invalid literal for int() with base 10: 'a' 
Смежные вопросы