python - 检索非类型对象不是可迭代错误
问题描述
我有以下代码将视频帧从客户端发送到服务器。我正在以每秒五帧的速度从文件夹中读取帧,然后将帧发送到服务器。我在运行代码时检索错误。
INTERVAL_DELAY = 0.25
SERVER_A_ADDRESS = "tcp://localhost:5555"
SERVER_A_TITLE = "Server A"
context = zmq.Context()
socket_server_a = context.socket(zmq.PUSH)
socket_server_a.connect(SERVER_A_ADDRESS)
destination = {
"currentSocket": socket_server_a,
"currentServersTitle": SERVER_A_TITLE}
running = True
frame_count = 0
def send_frame(frame, frame_count):
global destination, running
try:
frame = cv2.resize(frame, (224, 224))
encoded, buffer = cv2.imencode('.jpg', frame)
jpg_as_text = base64.b64encode(buffer)
destination["currentSocket"].send(jpg_as_text)
except Exception as Error:
print(Error)
running = False
def main():
global destination, running, frame_count
filenames = [img for img in glob.glob("video-frames/*.jpg")]
fps = 5
interval = int(1 / fps)
while running:
filenames = sorted(filenames, key=os.path.getctime) or filenames.sort(key=os.path.getctime)
for img in filenames:
frame = cv2.imread(img)
frame_count += 1
threading.Thread(target=send_frame, args=(frame, frame_count)).start()
time.sleep(interval)
time.sleep(INTERVAL_DELAY)
destination["currentSocket"].close()
destination["pendingSocket"].close()
if __name__ == "__main__":
main()
检索错误:
for img in filenames:
TypeError: 'NoneType' object is not iterable
谢谢
解决方案
sorted(lst)
是一个返回新列表的函数。
lst.sort()
对列表进行适当的排序,并且没有任何内容可返回,因此它返回None
.
a or b
评估允许决定它是真还是假的第一件事。
如果您的filenames
列表不为空,sorted(filenames, key=os.path.getctime)
则不会为空,因此在布尔上下文中将其视为 True。由于整个条件是肯定的True
,sorted(filenames, key=os.path.getctime) or filenames.sort(key=os.path.getctime)
计算为sorted(filenames, key=os.path.getctime)
如果filenames
为空,则为sorted(filenames, ...)
空列表,即认为是假的。因此,必须评估第二部分sort(...)
以决定整个or
表达式。它返回None
,最终确定整体的真实性,评估为决定性的价值,None
.
你的情况就是这样。
因此,只需删除最后一部分并使用:
filenames = sorted(filenames, key=os.path.getctime)
推荐阅读
- flutter - 是否可以使用两个不同的 Firebase 查询并组合 Docsnapshot 结果?
- azure - 导出 ARM 模板时出错
- python - Python 数学绘图库
- java - 无法找到或加载主类 com.amazonaws.services.lambda.runtime.api.client.AWSLambda
- datasource - 如何更新 Apache Druid 中的现有数据
- prisma - 阵列中的棱镜拼接项目
- json - VS Code 中的 WSL 集成 - 如何在 Setting.json 中设置它而不发出警告
- server - Zenko云服务器的配置
- python - 为什么 contextlib.redirect_stderr 上下文管理器没有捕获异常输出?
- typescript - 获取传入 props 的组件的 props 类型