staxbel
Может есть возможность записать в БД данные которые имеют только цифры, если условие не выполнено - просто продолжаем дальше.
Можешь выбрать цифры
def select_data(data):
tmp = data[11:16]
digits = bytes(i for i in tmp if chr(i).isdigit())
out = digits
return out
...
reply = ser.read(22)
clean_data = select_data(reply)
В clean_data будут выбраны цифры.
Принцип работы
>>> def select_data(data):
... tmp = data[11:16]
... digits = bytes(i for i in tmp if chr(i).isdigit())
... out = digits
... return out
...
>>> bytes([0x40, 0x32, 0x41, 0x33] * 10)
b'@2A3@2A3@2A3@2A3@2A3@2A3@2A3@2A3@2A3@2A3'
>>>
>>> select_data(bytes([0x40, 0x32, 0x41, 0x33] * 10))
b'323'
>>>
Если же надо определять, имеют ли данные только цифры, то также надо написать функцию
def select_data(data):
out = data[11:16]
return out
def check_data(data):
out = data.isdigit()
return out
...
reply = ser.read(22)
clean_data = select_data(reply)
f_data_onlydigits = check_data(clean_data)
В clean_data будут выбранные данные из ответа, а в f_data_onlydigits будет True или False в зависимости от того, состоят ли выбранные данные только из цифр.
Принцип работы
>>> def check_data(data):
... out = data.isdigit()
... return out
...
>>> bytes([0x40, 0x32, 0x41, 0x33] * 10)
b'@2A3@2A3@2A3@2A3@2A3@2A3@2A3@2A3@2A3@2A3'
>>>
>>> check_data(bytes([0x40, 0x32, 0x41, 0x33] * 10))
False
>>>
>>> bytes([0x33, 0x32, 0x35, 0x33] * 10)
b'3253325332533253325332533253325332533253'
>>>
>>> check_data(bytes([0x33, 0x32, 0x35, 0x33] * 10))
True
>>>
По поводу всех разговоров про целые числа или вещественные числа или рациональные дроби там - всё это проверяется внутри функции check_data() путём дописывания её содержимого, которое также может вызывать вспомогательные функции, которые пишутся для проверки отдельных вопросов. Функции вызывают функции, которые вызывают функции, которые вызывают функции и так далее.