int не может конвертировать не-строку с явным основанием для цикла for с fetchval - PullRequest
0 голосов
/ 26 февраля 2019

Я все больше запутываюсь в питоне.когда я пробую одну строку, это работает, но когда я работаю над целыми строками одного столбца, это показывает ошибку.Я хочу использовать функцию convert_hex_to_int для каждой строки в столбце, но она показывает мне ошибку

Traceback (последний вызов был последним):
Файл "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:]), интервал)] 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)

Пожалуйста, оставьте любой комментарий, если я что-то пропустил, заранее спасибо.Когда я отлаживал его, он показывает что-то вроде этого: Отладочный экран

* извините, мне пришлось прикрепить изображение, так как оно является отладочным экраном, и я не могу скопировать код, и это должно былобыть в ссылке, потому что я новый пользователь ** edit: я думаю, что это связано с использованием .fetchval дважды, но я не слишком уверен

1 Ответ

0 голосов
/ 28 февраля 2019

Если строка

[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 тогда следующая строка должна быть переработана.

...