如何在Mako运行环境中优雅地处理NameError和AttributeError?

5 投票
1 回答
1742 浏览
提问于 2025-04-17 01:55

我发现,在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

就这样。谢谢你,谷歌。

撰写回答