#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
И для присвоения вы должны встроить эту вещь в <% %>
Если вы будете следовать этому, ваш код будет выполняться.