2014-01-30 4 views
0

Я пытаюсь создать HTML форму из скрипта Python CGI.Я не понимаю, питона `печать«»" `

script_name=os.environ.get('SCRIPT_NAME', '') 

form = cgi.FieldStorage() 
message = form.getvalue("message", "(no message)") 

print """ 

    <p>Previous message: %s</p> 

    <p>form 

    <form method="post" action="%s"> 
    <p>message: <input type="text" name="message"/></p> 
    </form> 

</body> 

</html> 
""" % cgi.escape(message), script_name 

выше, конечно, не работает. Я был под ложным впечатлением, что весь print """ blah blah %s ...""" % string_var работал как printf функции языка C Так что я полагаю, делать здесь

Я получаю сообщение об ошибке в браузере:.?

Traceback (most recent call last): 
    File "/usr/lib/cgi-bin/hello.py", line 45, in <module> 
    """ % cgi.escape(message), script_name 
TypeError: not enough arguments for format string 
+1

Что на самом деле происходит? Вы получили сообщение об ошибке? Если да, можете ли вы показать это нам? – user2357112

+4

Оберните аргументы форматирования в круглых скобках :) – mhlester

+1

Без круглых скобок Python думает, что вы пытаетесь напечатать две вещи: строку с одним аргументом форматирования и вторую переменную. – jayelm

ответ

2

Вам нужно обернуть аргументы формата в скобках.

print """ %s %s 
do re me fa so la ti do 
""" % (arg1(arg), arg2) 
3
print 'blah' % x, y 

не интерпретируется как

print 'blah' % (x, y) 

а как

print ('blah' % x), y 

круглые скобки cgi.escape(message), script_name передать кортеж в качестве второго аргумента %. Кстати, это одна из причин, по которой вы можете предпочесть метод str.format по сравнению с %.

2

Когда код выполняется, то первое, что происходит, он вычисляет выражение

long_string % cgi.escape(message) 

Поскольку есть две клавиши в длинной строке, но только одно значение на другой стороне оператора %, это в противном случае вы видите TypeError.

Решение завернуть оба значения в скобках, поэтому второй операнд интерпретируется как кортеж:

long_string % (cgi.escape(message), script_name) 
+0

Лучшее решение заключается в использовании нового метода '.format'. Эта ошибка никогда не возникала бы при использовании этого. – SethMMorton

+0

@Steh interesting. Где я могу узнать больше о .format? –

+0

[Формат синтаксиса строки] (http: //docs.python. орг/2/библиотека/string.html # формат-строка-синтаксис) – SethMMorton