Mako在有效代码上给出了SyntaxError吗?

时间:2011-04-12 12:35:26

标签: python syntax-error mako

我正在尝试在mako模板中使用一段代码,但无论我放在块中,Mako坚持认为这是一个语法错误。

以下是相关区块的片段:

  <td class="col_sm_space">&nbsp;</td>
  <%
      if session.dist == "metric":
          delta_distance = "%.2fkm" % (trk["d_distance"] / 1000.0)
          delta_fuel = "%.2fl" % (trk["d_fuel"])
          delta_co2 = "%.2fg" % (trk["d_co2"])
          delta_co2_rate = "%.2fg/l" % trk["d_co2_rate"])
          trip_av_speed = "%dkm/h" % int(trk["trip_av_speed"])
          trip_peak_speed = "%dkm/h" % int(trk["trip_peak_speed"])
  %>
  <td class="col_field" title="${delta_distance}">${trk["trip_distance"]}</td>

我在if session.dist == "metric":行上遇到语法错误,虽然我可以将其替换为任何内容(例如foo = "bar")但它仍然会给我错误。

Mako回来了:

SyntaxException: (SyntaxError) invalid syntax (line 5) ('if session.dist == "metric":\\n delta_distance = ') in file '<snipped>' at line: 271 char: 9\n, referer: <snipped>

271是开头<%。显然,字符9将成为下一行if的开头。

奇怪的是,我在其他页面上使用了这个完全相同的设置,对那些人来说没问题 - 只是不在这里。

有什么明显的东西我在这里不见了?

4 个答案:

答案 0 :(得分:2)

我对此感到非常沮丧。在我的情况下,至少,错误报告是完全错误的。它指向python块的第一行,就像你的那样,当实际错误位于不同的python块中时,50行之后。

可能,你有一个简单的语法错误,如错误的缩进或if语句后缺少冒号...我不能给你任何更好的调试建议,而不是通过你的python与细齿梳。如果可以在Mako之外对你的python块进行单元测试,那可能会有所帮助。

答案 1 :(得分:1)

这是很久以前的问题,但是为了记录,有一个失踪的左手,“(”,在这一行,它不清楚,如果这导致问题,但似乎可能:

delta_co2_rate = "%.2fg/l" % trk["d_co2_rate"])

至少应该是:

delta_co2_rate = "%.2fg/l" % (trk["d_co2_rate"])

答案 2 :(得分:1)

在mako模板中,当您使用条件语句时,例如,如果,等等,它应该是这样的:如果条件
则为%       一些代码
%endif

对于分配,你必须将该东西嵌入<% %>
如果你将遵循这个,你的代码将会运行

答案 3 :(得分:0)

我的经验是我有这个语法:

% if ${use_force_ssl} == 1:

相反,应该是这样的:

% if use_force_ssl == 1:

希望这有助于某人。