exception块在python中不捕获异常
我的代码如下exception块在python中不捕获异常,python,exception,try-catch,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 = Somethin
class Something(models.Model)
def exception(self)
try:
Something.objects.all()
except Exception():
raise Exception()
从testcases调用这个方法,它可以工作,但我需要引发异常,它不能捕获异常
这是我的测试用例
def test_exception(self):
instance = Something()
instance.exception()
工作正常,但我需要从exception块引发异常为什么捕获异常只是为了重新引发它? 如果您在except套件中除了重新引发异常之外没有做任何事情,那么首先不要捕获异常:
@staticmethod
def exception():
Something.objects.all()
如果您正在
套件中执行除
之外的非平凡操作,则:
def exception(self):
try:
Something.objects.all()
except Exception:
# do something (with self?)
raise
然后,要测试异常
方法是否引发异常:
def test_exception(self):
instance = Something()
self.assertRaises(Exception, instance.exception)
这取决于Something.objects.all()
引发Exception
注:如果
异常
不依赖于自身
,则最好将其从参数列表中删除,并将异常
设为静态方法
PPS<代码>异常是一个非常广泛的基本异常类。更具体的异常将更有助于调试,并允许其他代码捕获此特定异常,而不是强制它处理任何可能的
异常
为什么捕获异常只是为了重新引发它?
如果您在except套件中除了重新引发异常之外没有做任何事情,那么首先不要捕获异常:
@staticmethod
def exception():
Something.objects.all()
如果您正在
套件中执行除
之外的非平凡操作,则:
def exception(self):
try:
Something.objects.all()
except Exception:
# do something (with self?)
raise
然后,要测试异常
方法是否引发异常:
def test_exception(self):
instance = Something()
self.assertRaises(Exception, instance.exception)
这取决于Something.objects.all()
引发Exception
注:如果
异常
不依赖于自身
,则最好将其从参数列表中删除,并将异常
设为静态方法
PPS<代码>异常是一个非常广泛的基本异常类。更具体的异常将更有助于调试,并允许其他代码捕获此特定异常,而不是强制它处理任何可能的异常
except Exception():
except Exception:
应该是:
这一行:
except Exception():
except Exception:
应该是:
这将捕获错误并在需要时打印准确的消息
这将捕获错误并在需要时打印准确的消息。不清楚您要做什么。为什么要从catch块引发异常?此外,您的示例中存在大量语法错误(例如,缺少
:
和异常
上的错误缩进)。如果您使用python unittest框架,您可能需要使用assertRaises(exception)方法。您尝试执行的操作非常不清楚。为什么要从catch块引发异常?此外,您的示例中还有许多语法错误(例如缺少:
和异常上的错误缩进)。如果您使用python unittest框架,您可能希望使用assertRaises(异常)方法。是的,但当然不应该是,因为捕捉异常是一个非常糟糕的主意-你应该捕捉你处理的实际异常,让其他异常冒泡起来。我可以知道投票失败的原因吗?我的回答在技术上是正确的,完全回答了OP的问题,因此我认为没有理由投反对票,请参阅StackOverflow的常见问题解答。如果您想就好的Python编程实践向OP提供建议,请评论这个问题。@nicola您是对的。事实上,我投了更高的票。它比其他答案更好地回答了这个问题,这些答案指出了正确的用法,但没有说明原始示例失败的原因。我怀疑它也应该是raiseexception
(不带括号)或raise
。好的做法与坏的做法不是问题的一部分。是的,但当然不应该是,因为仅仅捕获异常是一个非常糟糕的主意-你应该捕获你处理的实际异常,让其他异常冒泡。我可以知道否决票的原因吗?我的回答在技术上是正确的,完全回答了OP的问题,因此我认为没有理由投反对票,请参阅StackOverflow的常见问题解答。如果您想就好的Python编程实践向OP提供建议,请评论这个问题。@nicola您是对的。事实上,我投了更高的票。它比其他答案更好地回答了这个问题,这些答案指出了正确的用法,但没有说明原始示例失败的原因。我怀疑它也应该是raiseexception
(不带括号)或raise
。好的做法和坏的做法不是问题的一部分。我相信你的意思是提高错误。您不能发出err.message
这是一个字符串。我相信您的意思是raiseerr
。您不能引发err.message
,它是一个字符串。