python - TypeError:“bytearray”对象不能解释为整数
问题描述
我想通过 HTTP 发送音频数据,但我不明白为什么会出现此异常:
Exception happened during processing of request from ('127.0.0.1', 59976) Traceback (most recent call last): File "/usr/lib/python3.6/socketserver.py", line 654, in process_request_thread self.finish_request(request, client_address) File "/usr/lib/python3.6/socketserver.py", line 364, in finish_request self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.6/socketserver.py", line 724, in __init__ self.handle() File "/usr/lib/python3.6/http/server.py", line 418, in handle self.handle_one_request() File "/usr/lib/python3.6/http/server.py", line 406, in handle_one_request method() File "/home/vivanov/temp.py", line 113, in do_GET data.append(bytearray(stream.read(CHUNK))) TypeError: 'bytearray' object cannot be interpreted as an integer
问题似乎与将值传递给wfile.write
.
我该如何解决这个问题?
这是我的代码:
class ChunkingRequestHandler(BaseHTTPRequestHandler):
ALWAYS_SEND_SOME = False
ALLOW_GZIP = False
protocol_version = 'HTTP/1.1'
def do_GET(self):
ae = self.headers.get('accept-encoding') or ''
# send some headers
self.send_response(200)
self.send_header('Transfer-Encoding', 'chunked')
self.send_header('Content-type', 'audio/x-wav')
self.end_headers()
data = bytearray(wav_header)
data.append(bytearray(stream.read(CHUNK)))
print(data)
self.wfile.write(b"%X\r\n%s\r\n" % (len(data), data))
while True:
data = bytearray(stream.read(CHUNK))
self.wfile.write(b"%X\r\n%s\r\n" % (len(data), data))
# send the chunked trailer
self.wfile.write('0\r\n\r\n')
解决方案
尽管有它的名字,但如果你想一次将多个元素附加到 Python 中的类似列表的对象,你不能使用该append
方法。Abytearray
就像一个字节列表,因此将另一个附加或连接bytearray
到它的方法是使用extend
方法,或者+=
:
data += bytearray(...)
# OR
data.extend(bytearray(...))
事实上,如果你添加到你bytearray
的东西已经是可以传递给bytearray()
构造函数的东西,你可能不需要将它包装在bytearray()
. 例如,可以直接添加bytes
对象(如):b'something'
data += b'something'
一旦你修复了那行代码,你可能会在其他行上遇到问题。例如,如果wfile.write
需要bytes
,那么向它发送一个 unicode 字符串'0\r\n\r\n'
可能会出错;看起来你打算写b'0\r\n\r\n'
。
推荐阅读
- python - TypeError:__init__() 在 Python 中为 CatBoost 获得了一个意外的关键字参数“early_stopping_rounds”
- authentication - 如何在 Groovy/Grails 上实现社交网络登录?
- powershell - 用于将多行文本提取到单行的 Powershell 脚本
- c# - 使用 google vision OCR API 从特定图像位置提取数据
- tcl - 按预定义列表中的值对 TCL 列表进行排序
- pdf - PDF Stream 中的 Post Scripts 命令将如何绘制?
- javascript - 在javascript中理解Valid Anagram的解决方案
- python - 使用 pipe() 和 fdopen() 将数据从 Python 脚本传递到 Windows 中的 C++ 应用程序
- javascript - 无法使用 dstore/Memory 内存存储填充 dijit/form/select
- c++ - Qt webenginewidgets 疑难解答