Найти - Пользователи
Полная версия: Исключить ошибку
Начало » Python для новичков » Исключить ошибку
1
Irv1n
Есть данная функция:
     
def get_dcv(self):
        self.connector.send('DCV?')
        return float(self.connector.receive())

Функция обращается к прибору через rs232 порт и получает значения: 1.11E-3, 1.12E-3 и т.д.
Иногда с прибора прилетают битые данные и возникает ошибка: value error could not convert string to float и моя програма крашится. Как лучше всего обработать данную ошибку? Если прилетают битые данные то они отбрасываются и функция заново получает данные с прибора?
xam1816
 def get_dcv(self):
    while data := self.connector.send('DCV?'):
        try:
            return float(data)
        except ValueError:
            pass

или вот так

 def isvalid(data):
    pass # здесь описать что является приемлимым return True\False
def get_dcv(self):
    while data := self.connector.send('DCV?'):
        if isvalid(data):
            return float(data)
py.user.next
Irv1n
Иногда с прибора прилетают битые данные и возникает ошибка: value error could not convert string to float и моя програма крашится. Как лучше всего обработать данную ошибку? Если прилетают битые данные то они отбрасываются и функция заново получает данные с прибора?
Надо оставить функцию чистой от проверок. А на ошибку проверять снаружи.

Пример
  
>>> import random
>>> 
>>> def func():
...     n = random.randint(1, 5)
...     if n > 4:
...         print('ok', n)
...     else:
...         print('fail', n)
...         raise ValueError
... 
>>> while True:
...     try:
...         func()
...     except ValueError:
...         continue
...     break
... 
fail 4
fail 4
fail 3
fail 1
fail 3
fail 1
fail 4
fail 3
fail 4
fail 1
fail 1
fail 3
fail 2
ok 5
>>>

А если ты будешь внутри функции проверять, то когда тебе попадётся исправное устройство, оно будет многократно проверяться на ошибки, которых там заведомо нет. Это будет тратить время и память впустую.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB