Я делаю несколько простых вычислений в шаблоне jinja2 (вычитание) и хотел бы найти решение для обработки TypeErrors в Jinja2.Что такое правильный способ обработки TypeError в Jinja2
Это то, что я пробовал до сих пор: чтобы игнорировать недоступные переменные во время рендеринга, я подклассифицировал Undefined() как таковой.
def silently(*args, **kwargs):
return u''
return_new = lambda *args, **kwargs: SilentUndefined()
class SilentUndefined(Undefined):
__unicode__ = silently
__str__ = silently
__call__ = return_new
__getattr__ = return_new
Этот подход работает большую часть времени, за вычетам, например, за исключением:
Traceback (most recent call last):
File "runScheduler.py", line 108, in <module>
dataFetcher.fetchData(**kwargs)
"/Fetcher/modules/dataFetcher.py", line 836, in fetchData
hmgReport.send_email(emailSubject,emailSender,emailRecipients,attachementFiles, context, 'reportTemplates/'+emailTemplate)
File "/Fetcher/modules/reportEngine.py", line 190, in send_email
print t.render(c)
File "/usr/local/lib/python2.7/dist-packages/jinja2/environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File "/usr/local/lib/python2.7/dist-packages/jinja2/environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "<template>", line 890, in top-level template code
TypeError: unsupported operand type(s) for -: 'SilentUndefined' and 'int'
Я думал, что я мог бы просто игнорировать «TypeError» Exception как таковой, но это не работает ,
class TypeError():
pass
Это, как я делаю рендеринг ...
with open (reportEmailTemplate, "r") as myfile:
reportEmailTemplateHTML = myfile.read()
#apply context to coverpage
t = Template(reportEmailTemplateHTML, undefined=SilentUndefined)
renderedReportEmailTemplate = t.render(context)
Я немного ленивый и предпочел бы просто игнорировать этот тип ошибки. Это возможно? – Jabb
Насколько я знаю, намеренно невозможно обрабатывать исключения, происходящие внутри шаблонов Jinja, и я думаю, что это очень хорошо. Ваш код, вероятно, требует немного большей структуризации перед шагом шаблонов. Вы пытаетесь бороться с шаблоном двигателя, чтобы компенсировать то, что, вероятно, незначительное упущение на несколько шагов раньше. Продолжайте лениться, просто положите свою лень в нужное место;) – Jivan
ну ... вы правы :-)) Спасибо! – Jabb