Python 捕获所有自定义异常

Python 捕获所有自定义异常,python,Python,我为Django项目创建了许多自定义异常。像这样 错误。py # General Exceptions class VersionError(Exception): pass class ParseError(Exception): pass class ConfigError(Exception): pass class InstallError(Exception): pass 但是,我希望打印自定义异常的输出,而不是常规异常的输出。但不想将它们全部

我为Django项目创建了许多自定义异常。像这样

错误。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
试试看:
做错事
除行政会议外:
打印exc
除:
打印“Gen”

您应该为所有自定义异常创建一个公共基类,并捕获它。

您应该为所有自定义异常创建一个公共基类,并捕获它。

您应该为自定义异常定义一个自定义标记基类:

# 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
my_exceptions = (VersionError,
                 ParseError,
                 ConfigError,
                 InstallError)
通过该修改,您可以轻松地说:

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

(顺便说一句,您应该使用推荐的
Exception as ex
语法,而不是
Exception,ex
,有关详细信息,请参阅)

您应该为自定义异常定义自定义标记基类:

# 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
my_exceptions = (VersionError,
                 ParseError,
                 ConfigError,
                 InstallError)
通过该修改,您可以轻松地说:

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

(顺便说一句,您应该使用推荐的
Exception as ex
语法,而不是
Exception,ex
,有关详细信息,请参阅)

创建自定义基本异常并从该基本执行选项派生所有其他自定义异常:


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

创建自定义基本异常并从此基本执行选项派生所有其他自定义异常:


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

规范的方法是为所有异常创建公共超类

# 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

规范的方法是为所有异常创建公共超类

# 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

您可以创建异常的元组:

# 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
my_exceptions = (VersionError,
                 ParseError,
                 ConfigError,
                 InstallError)
用法:

except my_exceptions as exception:
    print exception
e、 g:

my_exceptions=(LookupError、ValueError、TypeError) >>>尝试: …int('a') …除了作为例外的my_例外: …打印类型(例外) …打印异常 基数为10的int()的文本无效:“a”
您可以创建异常的元组:

# 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
my_exceptions = (VersionError,
                 ParseError,
                 ConfigError,
                 InstallError)
用法:

except my_exceptions as exception:
    print exception
e、 g:

my_exceptions=(LookupError、ValueError、TypeError) >>>尝试: …int('a') …除了作为例外的my_例外: …打印类型(例外) …打印异常 基数为10的int()的文本无效:“a”