引发错误不会阻止 try-except 子句被执行?
raising error does not prevent try-except clause to get executed?
我在测试一段看起来有点像这样的代码时感到很惊讶:
if x:
try:
obj = look-for-item-with-id==x in a db
if obj is None:
# print debug message
raise NotFound('No item with this id')
return obj
except Exception, e:
raise Error(e.message)
我预计如果数据库中没有提供 id (x) 的项目,则会引发 NotFound 异常。但是相反,在到达 if 子句并打印调试消息后,它到达了 except 子句并引发异常(exc 消息是 Item not found ...)。有好心人指教一下吗?
如果 obj 是数组,请检查项目的长度或数量是否为零
这意味着 obj 不是 none 但不包含项目
当您说 except Exception, e:
时,您明确地捕获了(几乎)任何可能在该块内引发的 异常——包括您的 NotFound
。
如果你想让 NotFound
本身传播得更远,你根本不需要 try/except
块。
或者,如果您想在检测到 NotFound
时做一些特定的事情,然后继续传播相同的异常,您可以使用空白的 raise
语句重新引发它而不是引发像你一样的新异常;类似于:
try:
# .. do stuff
if blah:
raise NotFound(...)
except NotFound, e:
# print something
raise
另请注意,我已将异常块更改为 except NotFound
——使用 except Exception
通常不是一个好主意,因为它会捕获所有内容,这可能会隐藏您可能没有预料到的错误.基本上,您想使用 except
来捕捉 特定的 您知道如何处理的事情。
我在测试一段看起来有点像这样的代码时感到很惊讶:
if x:
try:
obj = look-for-item-with-id==x in a db
if obj is None:
# print debug message
raise NotFound('No item with this id')
return obj
except Exception, e:
raise Error(e.message)
我预计如果数据库中没有提供 id (x) 的项目,则会引发 NotFound 异常。但是相反,在到达 if 子句并打印调试消息后,它到达了 except 子句并引发异常(exc 消息是 Item not found ...)。有好心人指教一下吗?
如果 obj 是数组,请检查项目的长度或数量是否为零 这意味着 obj 不是 none 但不包含项目
当您说 except Exception, e:
时,您明确地捕获了(几乎)任何可能在该块内引发的 异常——包括您的 NotFound
。
如果你想让 NotFound
本身传播得更远,你根本不需要 try/except
块。
或者,如果您想在检测到 NotFound
时做一些特定的事情,然后继续传播相同的异常,您可以使用空白的 raise
语句重新引发它而不是引发像你一样的新异常;类似于:
try:
# .. do stuff
if blah:
raise NotFound(...)
except NotFound, e:
# print something
raise
另请注意,我已将异常块更改为 except NotFound
——使用 except Exception
通常不是一个好主意,因为它会捕获所有内容,这可能会隐藏您可能没有预料到的错误.基本上,您想使用 except
来捕捉 特定的 您知道如何处理的事情。