我对python越来越感到困惑。 当我尝试一行时,它起作用,但是当我处理一列的整个行时,它显示错误。 我想对列中的每一行使用功能convert_hex_to_int, 但它告诉我错误
回溯(最近通话最近):
文件 “ C:/Users/ranic/.PyCharmCE2018.3/config/scratches/scratch_2.py”,行 59,在 result_print =(convert_hex_to_int(hex_int,4))
文件“ C:/Users/r/.PyCharmCE2018.3/config/scratches/scratch_2.py”,第32行, 总之 t_hex_to_int splitted = [hex(n)[2:] [i:i +间隔],范围为i(0,len(hex(n)[2:]),interval)] TypeError:'str'对象不能是 解释为整数
这是我的代码:
cnxn = pyodbc.connect(conn_str)
cnxn.add_output_converter(pyodbc.SQL_VARBINARY, hexToString)
cursor = cnxn.cursor()
def convert_hex_to_int(n:int, interval:int):
splitted = [hex(n)[2:][i:i + interval] for i in range(0, len(hex(n)[2:]), interval)]
return [int(hex(unpack('<H', pack('>H', int(i, 16)))[0]), 16) for i in splitted]
try:
cursor.execute(query)
row=cursor.fetchval()
row_list=[]
while row is not None:
row=cursor.fetchval()
hex_int = int(row, 16)
result_print = (convert_hex_to_int(hex_int, 4))
result_float = [float("{0:.2f}".format((i) * 10 ** -2)) for i in result_print]
row_list.append(result_float)
print(row_list)
如果我有什么遗漏,请留下任何评论,谢谢。 当我调试它时,它显示如下内容: Debugged screen
*对不起,我必须附加图像,因为它是调试屏幕,我无法复制代码,并且它必须处于链接状态,因为我是新用户 **编辑:我认为这与两次使用.fetchval有关,但我不太确定
答案 0 :(得分:0)
如果是行
[hex(n)[2:][i:i + interval] for i in range(0, len(hex(n)[2:]), interval)]
结果
TypeError:“ str”对象不能解释为整数
然后n
不能为整数。
观察,如果n
是'0x94069206'
:
>>> hex('0x94069206')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer
由于代码正在截取n
的片段,因此好像n
需要是字符串,因此该行应为:
splitted = [n[2:][i:i + interval] for i in range(0, len(n[2:]), interval)]
因此,函数签名应为
def convert_hex_to_int(n:str, interval:int)
另一方面,如果n
是int
,则需要重新编写下一行。