zoukankan      html  css  js  c++  java
  • wsgiref错误解决笔记 "write() argument must be a bytes instance"

      错误提示:

    C:UsersDmailAppDataLocalProgramsPythonPython37python.exe "E:/s9/day60/06 jinja2版web服务端示例.py"
    我再8090等你哦...
    Traceback (most recent call last):
      File "C:UsersDmailAppDataLocalProgramsPythonPython37libwsgirefhandlers.py", line 138, in run
        self.finish_response()
      File "C:UsersDmailAppDataLocalProgramsPythonPython37libwsgirefhandlers.py", line 184, in finish_response
        self.write(data)
      File "C:UsersDmailAppDataLocalProgramsPythonPython37libwsgirefhandlers.py", line 279, in write
        "write() argument must be a bytes instance"
    AssertionError: write() argument must be a bytes instance
    127.0.0.1 - - [29/Sep/2019 13:13:30] "GET /index/ HTTP/1.1" 500 59
    127.0.0.1 - - [29/Sep/2019 13:13:30] "GET /favicon.ico HTTP/1.1" 200 14
    

      错误代码:

    from wsgiref.simple_server import make_server
    from jinja2 import Template
    
    def index():
        with open('06jinja2版web框架.html','r',encoding='utf-8')as f:
            data = f.read()
        template = Template(data) # 生成模板文件
        ret = template.render({"name":"Dmail","hobby_list":['编程','大宝剑']}) #把数据填充到模板里面
        return [ret.encode('utf-8'),]
    
    
    
    url_func = [
        ('/index/',index)]
    
    def run_server(environ,star_response):
        star_response('200 OK',[('Content-Type','text/html;charset=urf-8')])
        url = environ['PATH_INFO'] #取到用户输入的url
        #print(url)
        func = None
        for i in url_func:
            if i[0] == url:
                func = i[1]
                break
        if func:
            response = func()
        else:
            response = b'404 not found!'
        return response
    
    if __name__ == '__main__':
        httpd = make_server('127.0.0.1',8090,run_server)
        print('我再8090等你哦...')
        httpd.serve_forever()
    

      

    run_server函数执行到
    response = func():
    ...
    return [ret.encode('utf-8'),]
    得到的返回值是一个列表
    发现返回值给错了,应该是给一个bytes
    将最后给返回值的代码改成
    return ret.encode('utf-8')
    访问:127.0.0.1:8090/index/之后可以正常访问了,但还是会报错
    再将
    run_server函数里的return改一下
    return [response,]
    好了,可以正常访问了,而且没有报错。
    修改后的代码:

    from wsgiref.simple_server import make_server
    from jinja2 import Template
    
    def index():
        with open('06jinja2版web框架.html','r',encoding='utf-8')as f:
            data = f.read()
        template = Template(data) # 生成模板文件
        ret = template.render({"name":"Dmail","hobby_list":['编程','大宝剑']}) #把数据填充到模板里面
        return ret.encode('utf-8')
    
    
    url_func = [
        ('/index/',index)]
    
    def run_server(environ,star_response):
        star_response('200 OK',[('Content-Type','text/html;charset=urf-8')])
        url = environ['PATH_INFO'] #取到用户输入的url
        #print(url)
        func = None
        for i in url_func:
            if i[0] == url:
                func = i[1]
                break
        if func:
            response = func()
        else:
            response = b'404 not found!'
        return [response,]
    
    if __name__ == '__main__':
        httpd = make_server('127.0.0.1',8090,run_server)
        print('我再8090等你哦...')
        httpd.serve_forever()
    

      服务端日志:

    C:UsersDmailAppDataLocalProgramsPythonPython37python.exe "E:/s9/day60/06 jinja2版web服务端示例.py"
    我再8090等你哦...
    127.0.0.1 - - [29/Sep/2019 13:27:37] "GET /index/ HTTP/1.1" 200 213
    127.0.0.1 - - [29/Sep/2019 13:27:37] "GET /favicon.ico HTTP/1.1" 200 14
    127.0.0.1 - - [29/Sep/2019 13:27:40] "GET /index/ HTTP/1.1" 200 213
    127.0.0.1 - - [29/Sep/2019 13:27:40] "GET /favicon.ico HTTP/1.1" 200 14
    

      PS:报错啥原因我也一脸懵逼,不太清楚,反正搜索谷歌,百度啊,修修改改就改好了。emmm,记个博客吧,怕以后遇到类似的错误。

  • 相关阅读:
    【做题】51NOD1518 稳定多米诺覆盖——容斥&dp
    【做题】TCSRM592 Div1 500 LittleElephantAndPermutationDiv1——计数&dp
    【做题】TCSRM591 Div1 500 PyramidSequences——数形结合&思维
    【做题】NOWCODER142A Ternary String——数列&欧拉定理
    【做题】CF196E. Opening Portals 排除无用边&最小生成树
    【做题】HDU6331 Walking Plan——矩阵&分块
    【做题】BZOJ2534 L-gap字符串——调和级数
    【做题】BZOJ2342 双倍回文——马拉车&并查集
    overleaf 提交arXiv 不成功
    神经网络 (2)- Alexnet Training on MNIST
  • 原文地址:https://www.cnblogs.com/Dmail/p/11607378.html
Copyright © 2011-2022 走看看