关于socket执行send()语句时,例如报错TypeError: a bytes-like object is required, not ‘list’等,各种数据类型转换报错总结

2023-05-16

关于socket执行send()语句时,各种数据形式转换报错总结

在执行connect.send()语句时,报如下类似的错
TypeError: a bytes-like object is required, not ‘str’
TypeError: a bytes-like object is required, not ‘list’
TypeError: a bytes-like object is required, not ‘set’
TypeError: a bytes-like object is required, not ‘dict’

以上问题主要是因为python3之后,无论是客户端还是服务器端的socket在执行send()或者sendall()时候,只能发送bytes类型的数据,因此需要将str,list,set,dict,object等数据类型转换成bytes类型。

代码中经常见的是TypeError: a bytes-like object is required, not ‘str’,也就是需要把字符串转换成bytes类型。因为往往socket中传递的一串数据,所以这种情况比较好解决。
对应解决方法链接如下:
链接: https://blog.csdn.net/u014770372/article/details/76285740
除了上边链接提供的decode和encode方法,也可以使用x.to_bytes来转换
下面展示例子。

    connect.send(len(x).to_bytes(length=6, byteorder='big'))

list,set,dict类型转换报错

然而在一些复杂的场景中,socket中send()的数据不是一个字符串那么简单,比如在联邦学习神经网络训练过程,client端的socket需要一次性发送profile、local gradient、epoch、labels、batch_data,intermediate data等一些列数据集合。例如下边语句:
在这里插入图片描述
这段代码中,client需要一次性发送client_fx, labels, iter, self.local_ep, self.idx, len_batch这6个数据。因此将这些数据组合作为set类型的数据data,然后 client.sendall(data)。但这时候会报错TypeError: a bytes-like object is required, not ‘set’,原因是set类型数据不不能直接发送,需要转换成bytes类型。然而如果使用to_bytes或encode方法,又会报错提示 ‘set’ object has no attribute ‘encode’,因为set,dict,list都不能直接转化成bytes类型。
有两种解决方法:
1、第一种是循环单独发送各个数据,把每个数据单独转换成bytes发送,但这种对于精确测试训练或推理延迟的场景不适用。第一种方法连接如下:
链接: https://bobbyhadz.com/blog/python-attributeerror-list-object-has-no-attribute-encode
2、第二种方法是pickle.dumps()方法。pickle.dumps()即序列化。序列化:把内存对象转换为字节序列的过程称为对象的序列化。因此我们可以通过pickle.dumps(),把set,list,dict或object转换成bytes,然后让send()法发送。因此上述图片中的代码可以改成如下:

	data={client_fx, labels, iter, self.local_ep, self.idx, len_batch}
	data=pickle.dumps(data)
	connect.send(data)

python各数据类型和pickle类总结

最后
对pyton中bytes,str,list,dict,set类型区别转换做一下总结,链接如下:https://blog.csdn.net/the_time_runner/article/details/86585766

对pickle类总结,链接如下:https://blog.csdn.net/coffee_cream/article/details/51754484

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于socket执行send()语句时,例如报错TypeError: a bytes-like object is required, not ‘list’等,各种数据类型转换报错总结 的相关文章

  • 图解迪杰斯特拉(Dijkstra)最短路径算法

    往期文章目录 干货满满 xff01 最小生成树 Prim算法 最小生成树 Kruskal算法 目录 前言 一 最短路径的概念及应用 二 Dijkstra迪杰斯特拉 1 什么是Dijkstra 2 逻辑实现 总结 前言 无论是什么程序都要和数
  • Vscode配置Git+快速入门,一篇学会80%的Git操作

    前言 团队开发中经常会用到Git xff0c 能极大简化开发的流程 xff0c 而个人开发也可以利用Git管理自己的代码 同样作为一个初学者 xff0c 我在学完Git之后写下这篇文章总结个人走过的坑 xff0c 大家一起进步 Git下载和
  • 【C++11】三大神器之——智能指针

    文章目录 前言 一 智能指针的原理1 RAII机制2 简单的实现 二 智能指针的用法1 智能指针的分类2 unique ptr基本语法 3 shared ptr基本语法 4 删除器5 weak ptr 前言 一 智能指针的原理 1 RAII
  • 【C++11】三大神器之——右值、移动语义、完美转发

    前言 如果你还不知道C 43 43 11引入的右值 移动语义 完美转发是什么 xff0c 可以阅读这篇文章 xff1b 如果你已经对这些知识了如指掌 xff0c 也可以看看有什么可以补充 x1f60f 一 右值 值类别vs变量类型 在正式认
  • 【C++11】三大神器之——包装器和绑定器

    前言 如果你还不知道 C 43 43 11 引入的包装器和绑定器是什么 xff0c 可以读读这篇文章 xff0c 看看有什么 启发 xff1b 如果你已经对包装器和绑定器了如指掌 xff0c 也可以读读这篇文章 xff0c 看看有什么 补充
  • 【神经网络和深度学习-开发案例】第四章 神经网络如何对数字进行分类

    神经网络和深度学习 第四章 神经网络如何对数字进行分类 案例 xff1a 使用神经网络识别手写数字 好了 xff0c 让我们来写一个程序 xff0c 学习如何识别手写的数字 xff0c 使用随机梯度下降和MNIST的训练数据 我们将用一个简
  • Win7下安装Ubuntu(双硬盘)的简要步骤

    0 硬件准备 一个至少4G大小的U盘 xff0c 用于刻录Ubuntu系统并安装 1 下载Ubuntu镜像及刻录 Ubuntu镜像 Ubuntu镜像可从官网下载 xff08 外网 xff0c 速度太慢 xff09 xff0c 或使用国内镜像
  • C++ Primer Plus拾遗

    本博文整理了C 43 43 Primer Plus前六章中的部分知识点 xff0c 一般为不常用的小技巧或基础概念性的内容 C与C 43 43 的语言特性 C语言特性 结构化编程 xff08 Structured Programming x
  • 时隔一年,对全国大学生智能车竞赛做段总结(五)

    早期粗糙的赛道元素处理 说这个没有别的意思 xff0c 就是觉得 xff0c 遇到实际应用上的问题 xff0c 虽然脑海里的知识技巧并不能让我们有多高明的手法去解决这个问题 xff0c 但也要努力去尝试 元素判断 这里的元素判断也是粗糙的
  • Windows7 VMware USB Arbitration Service启动失败解决

    转自 http huxiaodan666 blog 163 com blog static 162090542201091014749373 前几日安装了Windows7 xff0c 不过vmware虚拟机安装之后却无法使用usb 软件是官
  • Windows下以太坊公钥加密功能python实现

    文章目录 一 什么是公钥 私钥 地址二 实现过程1 从keystore文件中解出私钥以及私钥 gt 公钥 gt 地址2 利用公钥进行消息加密 解密 一 什么是公钥 私钥 地址 私钥 xff1a 32字节 xff08 256位 xff09 x
  • fatal error: mav_msgs/Actuators.h: 没有那个文件或目录

    编译ros gz包的时候 xff0c ros ign bridge一直报错 xff0c 最开始都已经放弃了 xff0c 但是今天发现不得不跑 xff0c 唉 xff0c 一直报 xff1a fatal error mav msgs Actu
  • stalled和Initial connection偶尔请求时间长

    Queueing 请求排队的时间 关于这个 xff0c 需要知道一个背景 xff0c 就是浏览器与同一个域名建立的TCP连接数是有限制的 xff0c chrome设置的6个 xff0c 如果说同一时间 xff0c 发起的同一域名的请求超过了
  • 自制stm32F103c6t6出现No target connected或者Internal command error的原因猜测和解决方法

    刚刚焊好的最小系统板 xff0c 在使用ST LINK下载程序的时候 xff0c 发现没有啥问题 xff0c 之后再下载的时候便出现了这样的问题 xff0c 怀疑是单片机供电出现了问题 xff0c 但是每个脚都供好了电 xff0c 网上说可
  • QEMU来创建一个,[教程在这]。

    RASPBERRY PI ON QEMU Let s start setting up a Lab VM We will use Ubuntu and emulate our desired ARM versions inside of i
  • 聚类(K-means)实现手写数字识别-2

    其他实现手写数字识别的方法 xff1a 1 KNN实现手写数字识别 2 卷积神经网络 xff08 CNN xff09 实现手写数字识别 3 全连接神经网络实现手写数字识别 4 聚类 xff08 K means xff09 实现手写数字识别
  • Github 搭建博客 jekyll Text 模板

    Text Theme text 是针对个人或团队网站 博客 项目 文档等的一款高度可定制的 Jekyll 主题 它参考了 iOS 11 的风格 xff0c 有大而突出的标题和圆润的按钮及卡片 特性 响应式HTML 语意化皮肤代码高亮主题国际
  • 小小飞控养成记(一)——需求分析与硬件选型

    写在系列开头 哥们买了大 家的DJI2s xff0c 在校园里飞着拍了一晚上 xff0c 把我看得口水流了一路 当然身为自动化人 xff0c 我也仅仅是馋那个能稳定飞行自动导航12km图传的电子系统罢了 xff08 强行掩饰 xff09 x
  • 无人机动力电池充放电说明

    一 说明书 https wenku baidu com view 370bb8a0ccbff121dc368334 html https wenku baidu com view 7a62d6e71ed9ad51f01df2d3 html
  • git reset 三种使用方法(--hard \soft\mixed)

    详情参考 xff1a https www jianshu com p c2ec5f06cf1a 一 本质 git reset的本质是 xff1a 移动HEAD以及它所指向的branch 二 参数 三种不同的参数 xff08 hard sof

随机推荐