【发布时间】:2012-05-07 06:27:07
【问题描述】:
在 Python 中,如何在 try/except 语句中两次使用具有相同异常名称的 except 块,而无需将代码包装到另一个 try/except 块中?
简单示例(此处每个调用pages.get 可能引发异常):
try:
page = pages.get(lang=lang)
except Page.DoesNotExist:
if not lang == default_lang:
page = pages.get(lang=default_lang)
else:
raise Page.DoesNotExist
except Page.DoesNotExist:
page = pages[0]
目前,在我的 Django 应用程序中,我会这样处理(但我不想在这里“额外”try 块):
try:
try:
page = pages.get(lang=lang)
except Page.DoesNotExist:
if not lang == default_lang:
page = pages.get(lang=default_lang)
else:
raise Page.DoesNotExist
except Page.DoesNotExist:
page = pages[0]
感谢任何比上面更好的处理代码! :)
谢谢。
【问题讨论】:
-
你为什么要这样做?
-
你不能。也许您可以告诉我们您认为需要这样做的原因,以便我们告诉您为什么不需要这样做
-
我同意,我认为这不是一个好主意。这意味着您有两个由同一事物触发的代码路径,它们执行不同的操作。将 try/catch 视为 if/else 语句。
-
真的很好奇不问:为什么不把
page = pages[0]而不是raise Page.DoesNotExist放在第一个try 块中? (当然这会帮助我更好地理解这个问题) -
@Gabber each
pages.get调用可能会引发异常,所以最后一个except语句只是尝试捕获这个可能的异常
标签: python exception syntax django-orm