例如,这里有一些来自django.templates.loader.app_directories.py的代码。[1]
try:
yield safe_join(template_dir, template_name)
except UnicodeDecodeError:
# The template dir name was a bytestring that wasn't valid UTF-8.
raise
如果你抓住一个例外只是为了重新提出它,它有什么作用?
[1]http://code.djangoproject.com/browser/django/trunk/django/template/loaders/app_directories.py
最佳答案
在链接到的代码中还有另一个异常处理程序:
try:
yield safe_join(template_dir, template_name)
except UnicodeDecodeError:
# The template dir name was a bytestring that wasn't valid UTF-8.
raise
except ValueError:
# The joined path was located outside of template_dir.
pass
由于
UnicodeDecodeError
是ValueError
的子类,第二个异常处理程序将导致忽略任何UnicodeDecodeError
。看起来这不是预期的效果,为了避免这种效果,第一个处理程序显式地处理UnicodeDecodeError
。因此,如果两个处理程序都在一起,只有当它不是ValueError
时,才会忽略UnicodeDecodeError
。