【发布时间】:2011-09-05 00:42:31
【问题描述】:
class AppError(Exception):
pass
class MissingInputError(AppError):
pass
class ValidationError(AppError):
pass
...
def validate(self):
""" Validate Input and save it """
params = self.__params
if 'key' in params:
self.__validateKey(escape(params['key'][0]))
else:
raise MissingInputError
if 'svc' in params:
self.__validateService(escape(params['svc'][0]))
else:
raise MissingInputError
if 'dt' in params:
self.__validateDate(escape(params['dt'][0]))
else:
raise MissingInputError
def __validateMulti(self, m):
""" Validate Multiple Days Request"""
if m not in Input.__validDays:
raise ValidationError
self.__dCast = int(m)
validate() 和 __validateMulti() 是验证和存储传递的输入参数的类的方法。从代码中可以看出,当某些输入参数丢失或某些验证失败时,我会引发一些自定义异常。
我想定义一些特定于我的应用的自定义错误代码和错误消息,例如,
错误 1100:“未找到关键参数。请验证您的输入。”
错误 1101:“未找到日期参数。请验证您的输入”
...
错误 2100:“多天参数无效。可接受的值为 2、5 和 7。”
并向用户报告。
- 如何在自定义异常中定义这些错误代码和错误消息?
- 如何以我知道要显示什么错误代码/消息的方式引发/捕获异常?
(PS:这是针对 Python 2.4.3)。
Bastien Léonard 在此SO comment 中提到您不需要总是需要定义一个新的__init__ 或__str__;默认情况下,参数将放在 self.args 中,并由__str__ 打印。
因此,我更喜欢的解决方案:
class AppError(Exception): pass
class MissingInputError(AppError):
# define the error codes & messages here
em = {1101: "Some error here. Please verify.", \
1102: "Another here. Please verify.", \
1103: "One more here. Please verify.", \
1104: "That was idiotic. Please verify."}
用法:
try:
# do something here that calls
# raise MissingInputError(1101)
except MissingInputError, e
print "%d: %s" % (e.args[0], e.em[e.args[0]])
【问题讨论】:
-
当try语句中的代码失败时你不应该引发错误吗?
标签: python error-handling custom-exceptions