除了块没有在python中捕获异常

时间:2011-10-20 08:06:45

标签: python exception try-catch

我的代码如下所示

class Something(models.Model)

    def exception(self)
    try:
       Something.objects.all()
    except Exception():
       raise Exception()

从testcases调用此方法,其工作但我需要引发异常,它不会捕获异常 这是我的测试用例

def test_exception(self):
    instance = Something()
    instance.exception()

它工作正常,但我需要从块

中引发异常

3 个答案:

答案 0 :(得分:7)

这一行:

except Exception():

应该是:

except Exception:

答案 1 :(得分:2)

def exception(self)
    try:
        Something.objects.all()
    except Exception, err:
        #print err.message (if you want)
        raise err

如果需要,这将捕获错误并打印确切的消息。

答案 2 :(得分:0)

为什么要抓住Exception才重新加注? 如果除了重新引发异常之外你没有在除套件中做任何事情,那么就不要首先捕获异常:

@staticmethod
def exception():
    Something.objects.all()

如果你在except套件中做了一些非常重要的事情,那么:

def exception(self):
    try:
        Something.objects.all()
    except Exception:
        # do something (with self?)
        raise 

然后,测试exception方法引发异常:

def test_exception(self):
    instance = Something()
    self.assertRaises(Exception, instance.exception)

这取决于Something.objects.all()提升Exception


PS。如果exception不依赖于self,那么最好将其从参数列表中删除,并使exception成为静态方法。

PPS。 Exception是一个非常广泛的基类异常类。更具体的异常对调试更有帮助,并允许其他代码捕获此特定异常,而不是强制它处理任何可能的Exception