2011-10-20 44 views
1

我的代码是像下面除了块不捕获异常在Python

class Something(models.Model) 

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

称为从测试用例,其工作这种方法,但我需要提高的例外,它不捕获异常 ,这里是我的测试用例

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

其工作正常,但我需要从引发异常除了块

+2

这是很不清楚你想要做什么。你为什么从你的catch-block中提出一个例外?另外,在你的例子中有很多的语法错误(例如''''''异常''和'异常'''')。 –

+0

如果你使用python unittest框架,你可能想使用assertRaises(异常)方法。 – Nicoretti

回答

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

这将捕获的错误,如果需要打印的精确味精。

+1

我相信你的意思是'raise err'。你不能引发'err.message'这是一个字符串。 – Xion

+0

是的,它应该是'提高犯错',感谢注意:) – avasal

0

为什么捕获该异常只是为了重新提高呢? 如果你没有在除套房做任何事情,除了重新提高例外,后来干脆不抓在首位的例外:

@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

6

这条线:

except Exception(): 

应该是:

except Exception: 
+2

是的,但当然不应该,因为这是一个非常糟糕的主意,只要赶上“异常” - 你应该抓住你处理的实际例外情况,并让其他人冒出泡沫。 –

+0

我可以知道downvote的原因吗?我的回答在技术上是正确的,并且完全回答* OP问题,所以我认为downvote没有正当理由,请参阅StackOverflow的FAQ。如果你想告诉OP有关好的Python编程实践,请评论一下问题。 –