Получите дополнительную информацию об ошибке операционной системы Python3

#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-hidapi

4. @diggusbickus Да, я это видел. Моя проблема заключается в получении информации об ошибке из Python, а не в том, чтобы на самом деле решить проблему.

5. затем вы увидели скрытый файл.pyx и выброс raise IOError('open failed') . и если вы не можете найти файл, это, вероятно, потому, что он скомпилирован в /usr/lib/python3/dist-packages/hidraw.cpython-39-x86_64-linux-gnu.so