在 Web 应用程序的上下文中,您可以只填充tmpl_context
.
from pylons import tmpl_context as c
from yourproject.lib.base import BaseController, render
class MyController(BaseController):
def index(self):
c.error = 'Invalid e-mail address'
return render('/mytemplate.mako')
'mytemplate.mako'
文件内容在哪里:
% if c.error:
error: ${c.error}
% endif
在通用 python 代码中,您可以:
返回一个元组
您可以从您的函数返回一个元组(这不是最好的方式):
class Error(Exception):
pass
def isvalid(something):
return False, Error("'%s' is invalid" % (something,))
例子:
ok, err = isvalid(object())
if not ok:
print err
引发异常
如果不应该立即调用者处理来自您的函数的错误,则可以使用异常将有关错误的信息向上传递到堆栈。
def do_stuff(something):
if not something.isready():
raise Error("'%s' is not ready to do stuff" % (something,))
例子:
class C(object):
def isready(self):
return False
def run():
# no error handling here
do_stuff(C())
# do something else
try: run()
except Error, e:
print e
通过回调
def do_stuff(something, onerror=lambda err: None):
if not something.isready():
onerror(Error("'%s' is not ready to do stuff" % (something,)))
例子:
do = lambda: do_stuff(C(), onerror=repeat)
def repeat(err):
"""Repeat until success."""
print err
time.sleep(5)
do() # possible infinite loop
do()