Python如何将命令行输入的十六进制I2C地址传入传感器初始化参数?
问题原因
命令行通过sys.argv获取的所有参数默认是字符串类型,而adafruit_ina260.INA260初始化的address参数要求传入整数类型的十六进制地址。你直接传入sys.argv[1]时,相当于传入了字符串"0x45",和预期的整数0x45(等价于十进制数值69)类型不匹配,因此触发报错。
解决方案
将命令行获取的字符串参数转换为十六进制整数即可,转换时指定base=16即可正确解析十六进制格式的输入,转换代码如下:
i2c_address = int(sys.argv[1], base=16)
完整可运行代码示例
import sys import board import adafruit_ina260 # 初始化I2C总线(可根据你的硬件实际配置调整) i2c = board.I2C() # 处理地址参数 try: # 将输入的十六进制字符串转换为整数 i2c_address = int(sys.argv[1], 16) except IndexError: print("错误:缺少硬件地址参数,执行命令示例:python3 sensor.py 0x45") sys.exit(1) except ValueError: print("错误:地址格式非法,请输入十六进制格式地址,例如0x45") sys.exit(1) # 初始化传感器 ina260 = adafruit_ina260.INA260(i2c, address=i2c_address)
补充说明
该转换代码兼容带0x前缀和不带前缀的十六进制输入,你传入0x45或者45都可以被正确识别为符合要求的整数地址。
内容的提问来源于stack exchange,提问作者tom82
相关产品推荐
相关产品推荐

