例如,这是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,只有a不是时,才会忽略UnicodeDecodeError。
UnicodeDecodeError
ValueError