调用round()报错:NoneType无__round__方法,浮点变量为何无法取整?
问题原因与解决方案
核心原因
你看到的float输出只是部分成功的调用结果,实际上pg.get_pressure()并非每次都返回浮点值——偶尔会返回None,只是之前的测试没遇到这个场景。
串口通信类的方法很容易因为以下原因返回None:
- 硬件连接松动、信号干扰
- 设备通信超时、响应不完整
- 数据解析失败(比如返回的格式不符合预期)
当pressure值为None时,调用round()自然会触发TypeError,因为NoneType没有__round__方法。
验证与临时修复
可以修改代码,先判断值是否有效再处理,同时捕捉到返回None的场景:
def Inficon(): try: with BGP400_RS232("/dev/serial0") as pg: while True: pressure = pg.get_pressure(PressureGaugeUnit.MBAR) print(type(pressure), pressure) if pressure is not None: print(round(pressure, 1)) else: print("Failed to read pressure data") time.sleep(0.5) except KeyboardInterrupt: print("Measurement stopped by user.") Inficon()
根本解决方向
- 检查硬件:确认串口线连接牢固,设备供电正常,通信参数(波特率、奇偶校验等)与设备匹配
- 查看类文档:查阅
BGP400_RS232的官方文档,明确get_pressure返回None的具体触发条件,针对性优化通信逻辑
内容的提问来源于stack exchange,提问作者adamssson
相关产品推荐
相关产品推荐

