Mako выдает синтаксическую ошибку для допустимого кода?

#python #syntax-error #mako

#python #синтаксическая ошибка #mako

Вопрос:

Я пытаюсь использовать блок кода в шаблоне mako, но независимо от того, что я помещаю в блок, Mako непреклонен, что это синтаксическая ошибка.

Вот фрагмент рассматриваемого блока:

   <td class="col_sm_space">amp;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: 9n, referer: <snipped>

Строка 271 — это открытие <% . Очевидно, что Char 9 будет началом if в следующей строке.

Как ни странно, я использую точно такую же настройку на других страницах, и с ними все в порядке — просто не здесь.

Чего-нибудь вопиюще очевидного я здесь упускаю?

Комментарии:

1. Есть ли у вас какие-либо невидимые символы в рассматриваемых строках? Или символы новой строки отличаются от символов в других рабочих файлах?

2. Нет, тот же формат. Окончания строк в Unix, никаких дополнительных пробелов в конце строк и никаких табуляций (отступ равен 4 пробелам).

Ответ №1:

У меня был действительно разочаровывающий опыт с этим. По крайней мере, в моем случае сообщение об ошибке было просто совершенно неверным. Это указывало на первую строку блока python, подобного вашему, когда фактическая ошибка была в другом блоке python, 50 строками позже.

Скорее всего, у вас простая синтаксическая ошибка, такая как неправильный отступ или пропущенное двоеточие после оператора if… Я не могу дать вам лучшего совета по отладке, чем прошерстить ваш python мелкозубой расческой. Если возможно модульное тестирование ваших блоков python за пределами Mako, это может быть полезно.

Ответ №2:

По моему опыту, у меня был этот синтаксис if:

 % if ${use_force_ssl} == 1:
  

Вместо этого это должно было быть так:

 % if use_force_ssl == 1:
  

Надеюсь, это кому-то поможет.

Ответ №3:

Этот вопрос задавался очень давно, но для записи в этой строке отсутствует левый paren «(«, неясно, является ли это причиной проблемы, но это кажется вероятным:

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

Должно быть как минимум:

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

Ответ №4:

В шаблонах mako,
когда вы используете условный оператор, например, if, для etc, Это должно быть так:
% if обусловливает
некоторый код
%endif

И для присвоения вы должны встроить эту вещь в <% %>

Если вы будете следовать этому, ваш код будет выполняться.