2015-03-27 3 views
2

Мне было интересно, кто-то может помочь мне понять, почему я продолжаю получать ошибку AssertionError: имена/значения заголовков должны иметь тип str (полученный b'Content-type) 127.0.0.1 - - [26/Март/2015 20:50:52] «GET /favicon.ico HTTP/1.1» 500 59. Код происходит из «Книги быстрого питона» из публикации Manning.Quick Python Book message_wall01.py

from wsgiref.simple_server import make_server 

def message_wall_app(environ, start_response): 
    status = b'200 OK' # HTTP Status 
    headers = [(b'Content-type', b'text/html; charset=utf-8')]  
    start_response(status, headers) 

    # The returned object is going to be printed 
    return ["<h1>Message Wall</h1>"] 

httpd = make_server('', 8000, message_wall_app) 
print("Serving on port 8000...") 

# Serve until process is killed 
httpd.serve_forever() 

ответ

1

Удалите Б из:

status = '200 OK' # HTTP Status 
headers = [('Content-type', 'text/html; charset=utf-8')] 

И добавить к return ["<h1>Message Wall</h1>"]. Вы читаете unicode/str и пишите bytes.

В старых документах была ошибка, в которой использовались примеры b'200 OK' и т. Д., На что была основана книга, есть старый отчет об ошибке here. Текущий docs показывает правильное использование.

После этого вы увидите вывод на http://localhost:8000/ и без ошибок.

+0

спасибо. Извлеките b из состояния и заголовков и добавив его в оператор return, сделав его, «return [b '

Стена сообщения

']« все работает. Спасибо. –

+0

@JesseJaime, не беспокойтесь, пожалуйста. –

Смежные вопросы