例如,这里有一些来自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

由于UnicodeDecodeErrorValueError的子类,第二个异常处理程序将导致忽略任何UnicodeDecodeError。看起来这不是预期的效果,为了避免这种效果,第一个处理程序显式地处理UnicodeDecodeError。因此,如果两个处理程序都在一起,只有当它不是ValueError时,才会忽略UnicodeDecodeError

09-30 14:21