只有加注的例外是否有用?

agi*_*liq 4 python exception-handling

例如,以下是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
Run Code Online (Sandbox Code Playgroud)

如果你抓住一个例外只是为了重新提升它,它的用途是什么?

[1] http://code.djangoproject.com/browser/django/trunk/django/template/loaders/app_directories.py

sth*_*sth 17

在您链接的代码中是另一个额外的异常处理程序:

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
Run Code Online (Sandbox Code Playgroud)

由于UnicodeDecodeError是子类ValueError,第二个异常处理程序会导致任何UnicodeDecodeError被忽略.看起来这不是预期的效果,并且避免它UnicodeDecodeError由第一个处理程序显式处理.因此,如果两个处理程序不在一起,ValueError则只能忽略它们UnicodeDecodeError.