Halten Sie eine Ausnahme in Python Webserver

Ich habe einen ziemlich einfachen Python-Webserver, der ein paar Webseiten zurückgibt, und es hält werfen TypeError: 'str' does not support the buffer interface . Hier ist mein Code, kann jemand sagen was ist falsch?

 from os import curdir from os.path import join as pjoin from http.server import BaseHTTPRequestHandler, HTTPServer class StoreHandler(BaseHTTPRequestHandler): def do_GET(self): if self.path == "/store.json": with open(pjoin(curdir, 'store.json')) as fh: self.send_response(200) self.send_header('Content-type','text/json') self.end_headers() self.wfile.write(fh.read()) elif self.path == "/Stock.htm": with open(pjoin(curdir, 'stock.htm')) as fh: self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() self.wfile.write(fh.read()) else: with open(pjoin(curdir, 'index.htm')) as fh: self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() self.wfile.write(fh.read()) def do_POST(self): if self.path == '/store.json': length = self.headers.getheader('content-length') data = self.rfile.read(int(length)) with open(pjoin(curdir, 'store.json'), 'w') as fh: fh.write(data) self.send_response(200) server = HTTPServer(('', 8080), StoreHandler) server.serve_forever() 

Hier ist die Ausnahmeausgabe:

 127.0.0.1 - - [30/Oct/2012 16:48:17] "GET / HTTP/1.1" 200 - ---------------------------------------- Exception happened during processing of request from ('127.0.0.1', 58645) Traceback (most recent call last): File "C:\Program Files\Python33\lib\socketserver.py", line 306, in _handle_request_noblock self.process_request(request, client_address) File "C:\Program Files\Python33\lib\socketserver.py", line 332, in process_request self.finish_request(request, client_address) File "C:\Program Files\Python33\lib\socketserver.py", line 345, in finish_request self.RequestHandlerClass(request, client_address, self) File "C:\Program Files\Python33\lib\socketserver.py", line 666, in __init__ self.handle() File "C:\Program Files\Python33\lib\http\server.py", line 400, in handle self.handle_one_request() File "C:\Program Files\Python33\lib\http\server.py", line 388, in handle_one_request method() File "C:\Users\Arlen\Desktop\Stock Recorder\webserver.py", line 25, in do_GET self.wfile.write(fh.read()) File "C:\Program Files\Python33\lib\socket.py", line 317, in write return self._sock.send(b) TypeError: 'str' does not support the buffer interface ---------------------------------------- 

Update: Hier ist, wie mein aktualisierter Code aussieht:

 from os import curdir from os.path import join as pjoin from http.server import BaseHTTPRequestHandler, HTTPServer class StoreHandler(BaseHTTPRequestHandler): def do_GET(self): if self.path == "/store.json": with open(pjoin(curdir, 'store.json')) as fh: self.send_response(200) self.send_header('Content-type','text/json') self.end_headers() self.wfile.write(fh.read(), 'rb') elif self.path == "/Stock.htm": with open(pjoin(curdir, 'stock.htm')) as fh: self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() self.wfile.write(fh.read(), 'rb') else: with open(pjoin(curdir, 'index.htm')) as fh: self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() self.wfile.write(fh.read(),'rb') def do_POST(self): if self.path == '/store.json': length = self.headers.getheader('content-length') data = self.rfile.read(int(length)) with open(pjoin(curdir, 'store.json'), 'w') as fh: fh.write(data) self.send_response(200) server = HTTPServer(('', 8080), StoreHandler) server.serve_forever() 

One Solution collect form web for “Halten Sie eine Ausnahme in Python Webserver”

Sockets senden und empfangen Bytes, aber Sie versuchen, Unicode-Strings zu senden, seit Sie die Datei geöffnet haben, ohne den Modus anzugeben (erinnern Sie sich, in Python 3 sind alle Strings standardmäßig unicode).

Du kannst entweder:

  • Verwenden Sie die integrierte bytes -Funktion, um die Daten zu transformieren

– oder –

  • Öffnen Sie die Datei im Binärmodus – ändern Sie open(pjoin(curdir, 'a.file')) zu open(pjoin(curdir, 'store.json'), 'rb') (beachten Sie den zusätzlichen rb Parameter).
  • TypeError: nicht unterstützter Operand Typ (s) für -: 'str' und 'int'
  • Umwandlung einer Zahl in exponentielle Form in Dezimalform in python
  • Kann nicht herausfinden, wie man die Enter-Taste an eine Funktion in tkinter bindet
  • Merkwürdiger Fehler in python3 bei der großen int-Berechnung
  • Backporting Python 3 offen (encoding = "utf-8") zu Python 2
  • __init__ Argument Missverhältnis zwischen Super und Unterklasse
  • Wie kann ich eine erweiterte Suche mit Google Customsearch API abfragen?
  • Python 3.4 urllib.request error (http 403)
  • Python ist die beste Programmiersprache der Welt.