#python #exception #hid
Вопрос:
Я использую Python3 в Ubuntu с модулем HID python3-hid.
Если я использую его для открытия устройства, я просто возвращаюсь:
OSError: open failed
Что побудило меня обработать исключение и посмотреть, смогу ли я извлечь из него дополнительную информацию:
try:
h.open(vend, prod)
except OSError as error :
print(error)
print(error.strerror)
print(error.filename)
sys.exit(1)
К моему удивлению, никакой дополнительной информации не было, так как ни strerror, ни filename отсутствовали.
open failed
None
None
ПРИМЕЧАНИЕ: Мой open() завершается успешно, когда я запускаюсь от имени root, поэтому я знаю, что это вопрос разрешений. Но почему эта ошибка операционной системы не может сказать мне, что она связана с разрешениями?
Как мне получить все подробности (конкретную причину сбоя и имя файла) из ошибки операционной системы?
ОБНОВЛЕНИЕ: Обратная связь ведет к файлу hid.pyx:
Traceback (most recent call last):
File "/tmp/./tst.py", line 30, in <module>
h.open(vend, prod)
File "hid.pyx", line 66, in hid.device.open
Я не уверен, почему моя система не может найти файл hid.pyx.
$ dpkg -S hid.pyx
dpkg-query: no path found matching pattern *hid.pyx*
Проверка вышестоящего пакета из Ubuntu… оказывается, python3-hid является частью программного обеспечения для кошелька с криптовалютой? Странный. Я думаю, что пропущу использование этого модуля и, возможно, напишу непосредственно на C, используя libhidapi-hidraw, который также использует этот модуль python.
Комментарии:
1. Вы проверили исходный код пакета? Это не похоже на стандартное
OSError
сообщение из стандартной библиотеки Python. Скорее всего, код содержитOSError
только ограниченный объем информации.2. Была ли какая-то обратная связь? В обработчике исключений вы можете добавить
import traceback;traceback.print_exc()
. Это может показать вам более подробную информацию о том, где произошла ошибка в HID, что может помочь отследить проблему. Ошибка разрешений от vanilla python будет выглядеть такPermissionError: [Errno 13] Permission denied: 'thefile'
. Похоже, что HID может использовать обновление функций для улучшения сообщений об ошибках.3.
For correct functionality under Linux, you need to create a rule file similar to this one in your udev rules directory.
github: cython-hidapi4. @diggusbickus Да, я это видел. Моя проблема заключается в получении информации об ошибке из Python, а не в том, чтобы на самом деле решить проблему.
5. затем вы увидели скрытый файл.pyx и выброс
raise IOError('open failed')
. и если вы не можете найти файл, это, вероятно, потому, что он скомпилирован в/usr/lib/python3/dist-packages/hidraw.cpython-39-x86_64-linux-gnu.so