如何在Mako运行环境中优雅地处理NameError和AttributeError?
我发现,在Mako模板中,如果试图访问一个未定义的变量,会出现一个叫NameError
的错误,这个很合理。不过在某些应用中,我们希望出错时能更优雅一点,比如在出现这种错误时用空字符串来代替(AttributeError
也是一个可能的错误)。在Django模板语言中,这是默认的处理方式。请问有没有办法在Mako中实现这种处理方式呢?
1 个回答
12
好吧,经过多一点搜索,事情变得清楚了:
import mako.runtime
mako.runtime.UNDEFINED = ''
现在,未定义的变量会产生空字符串。
查看原始的UNDEFINED值的源代码,真是让人开眼界:
class Undefined(object):
"""Represents an undefined value in a template.
All template modules have a constant value
``UNDEFINED`` present which is an instance of this
object.
"""
def __str__(self):
raise NameError("Undefined")
def __nonzero__(self):
return False
就这样。谢谢你,谷歌。