在Python 3.5.2中键入Error

时间:2016-09-28 18:41:24

标签: python-3.x

尝试按照本教程制作wsgi服务器Let's Build a Web Server. 但是使用python 3.5.2中的以下代码获取错误TypeError: initial_value must be str or None, not bytes

import io
env['wsgi.input']        = io.StringIO(self.request_data)

我该如何解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:1)

import StringIO更改为import io

request_line=request_line.rstrip('\r\n')更改为request_line=request_line.rstrip(b'\r\n')

env['wsgi.input']=StringIO.StringIO(self.request_data)更改为env['wsgi.input'] = io.BytesIO(self.request_data)

self.client_connection.sendall(response)更改为self.client_connection.sendall(response.encode())

希望现在工作正常。

答案 1 :(得分:0)

首先,该教程使用python2,因此如果您尝试将其直接应用于python3,可能会遇到其他问题

根据PEP3333(针对python3更新的WSGI规范),wsgi.input environ variable应该是字节流,而不是文本流,因此您应该使用io.BytesIO(),而不是{{1 }}

您目前获得的错误是因为io.StringIOself.request_data,但bytes要求其参数为io.StringIO()