经过多次googli搜索以了解最新情况,这里是:
我有一个自定义验证异常,它接受请求和响应
class ValidationException(Exception):
message = "Caught Validation Exception"
def __init__(self, request, response):
self.details = {
"request": request,
"response": response
}
super(ValidationException, self).__init__(self.message, self.details)
我有一个异常处理程序,它会在某些条件下引发它的实例:
class handler:
if something:
raise ValidationException(request, response)
如果我们在帖子
中遇到问题,则会调用该处理程序class Poster:
def post(data):
if self.last_response.status_code not in self.valid_post_codes:
self.exception_handler.handleException(self.last_request, self.last_response)
问题是,我正在提出ValidationException,在我的追溯中获取它,但是,它似乎没有被捕获到我想要的地方。
def testThis(self):
try:
self.poster.post(json.dumps({}))
except ValidationException:
print "got validation"
except Exception:
print "got exception"
结果:“异常”
回溯
lib/service/pas/api/order.py line 24 in postOrder
return self.post()
lib/service/base.py line 42 in post
self.exception_handler.handleException(self.last_request, self.last_response)
lib/service/exception/handler.py line 14 in handleException
raise ValidationException(request, response)
ValidationException:
它的价值:
assertRaises(ValidationException, self.poster.post, json.dumps({}))
也只捕获异常。有任何想法吗? :\ 任何帮助是极大的赞赏!提前致谢
答案 0 :(得分:1)
很好......所以..
我的IDE以" lib"为我的导入前缀导入了Exceptions.ValidationException。
当我将my.own.ValidationException抛出到其他地方时,它并没有被捕获,因为它不是同一类型。事实证明,碰巧是另一个我不知道的ValidationException ......
太奇怪了,不是!
答案 1 :(得分:0)
我无法用给出的代码复制它,但需要考虑两个可疑的地方:
您似乎在混合旧式和新式课程。这可能导致微妙的错误。尝试class Handler(object):
,class Poster(object):
,并在所有其他实例中创建新类型的类,它们是object
的显式子类。
您似乎有一个复杂的异常调用机制,
self.exception_handler.handleException(self.last_request, self.last_response)
为什么不呢:
raise ValidationException(self.last_request, self.last_repsonse)
好吗?至少作为调试实验,删除或短路您不确定或不能阻止工作的模块,功能和代码。切入追逐,看看你是否可以解决这个问题。至少,它可以帮助您缩小问题的范围。如果它在处理程序中,您可以选择修复它或者将其丢弃。