int无法使用fetchval

时间:2019-02-26 03:57:46

标签: python python-3.x for-loop int fetch

我对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有关,但我不太确定

1 个答案:

答案 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)

另一方面,如果nint,则需要重新编写下一行。