С документация :
Строка должна содержать две шестнадцатеричные цифры на байт с пропуском ASCII.
Так происходит:
$ python3
Python 3.6.6 (default, Sep 12 2018, 18:26:19)
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> bytearray.fromhex('B')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: non-hexadecimal number found in fromhex() arg at position 1
>>>
Попробуйте:
reply_sock.sendto(bytearray.fromhex('0B'),('10.0.0.32',15001))
, если вы это имеете в виду.
Обратите внимание, что ваш except
ловит все исключения, а не только те, которые вы ожидаете, поэтому вы не видите ошибку, которую вы вызываете.Попробуйте вместо этого использовать что-то вроде except OSError
.
Кроме того, подумайте об уменьшении количества кода в ваших try
разделах:
coords = struct.unpack('>dd',data)
#Stuff happens here
print(f'moved probe to {coords}')
bytes_to_send = bytearray.fromhex('0B')
try:
reply_sock.sendto(bytes_to_send,('10.0.0.32',15001))
except IOError as e1:
print(e1)
traceback.print_exc()
bytes_to_send = bytearray.fromhex('0D')
try:
reply_sock.sendto(bytes_to_send,('10.0.0.32',15001))
except IOError as e2:
print(e2)
traceback.print_exc()
break
Таким образом вы защищаете только код, который вы хотите.