【问题标题】:int can't convert non-string with explicit base in for loop with fetchvalint 无法在带有 fetchval 的 for 循环中转换具有显式基数的非字符串
【发布时间】:2019-02-26 03:57:46
【问题描述】:

我对 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 + interval] for i in range(0, len(hex(n)[2:]), interval)] TypeError: 'str' object cannot be 解释为整数

这是我的代码:

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

【问题讨论】:

  • 如果[hex(n)[2:][i:i + interval] for i in range(0, len(hex(n)[2:]), interval)] 引发TypeError: 'str' object cannot be interpreted as an integer,那么nstr,而不是int
  • @snakecharmerb 输入是十六进制字符串,类似于 0x94069206

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


【解决方案1】:

如果行

[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,那么下一行需要重新编写。

【讨论】:

  • 谢谢!但是,只是想知道,如果 `row=cursor.fetchval() hex_int = int(row, 16)` 第一行,我打算获取字符串类型的行,然后,第二行,我试图获取以 16 为基数的 int 数据类型中的数据,因为它是十六进制输入。那么,那会是 int 吗?
猜你喜欢
  • 2018-03-02
  • 2018-06-09
  • 2013-11-08
  • 2013-11-02
  • 1970-01-01
  • 2022-01-26
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多