Mako在有效代码上出现语法错误?

1 投票
4 回答
2211 浏览
提问于 2025-04-16 15:34

我在尝试在一个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 个回答

1

这个问题很早以前就被问过了,不过为了记录一下,这一行缺少了一个左括号“(”,不太清楚这是否是导致问题的原因,但看起来很有可能:

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

应该至少是:

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

我的经历是我用了这样的if语法:

% if ${use_force_ssl} == 1:

其实应该是这样的:

% if use_force_ssl == 1:

希望这能帮助到某个人。

2

我遇到过一个非常让人沮丧的情况。在我的例子里,错误报告完全不准确。它指向了一个 Python 代码块的第一行,就像你遇到的那样,但实际上错误是在50行之后的另一个 Python 代码块里。

很可能,你的代码里有个简单的语法错误,比如缩进不对或者在 if 语句后面缺少冒号……我不能给你更好的调试建议,除了仔细检查你的 Python 代码。如果可以的话,试着在 Mako 之外单独测试你的 Python 代码块,这可能会有帮助。

撰写回答