Найти - Пользователи
Полная версия: pywintypes.com_error - перехват и расшифровка
Начало » Python для экспертов » pywintypes.com_error - перехват и расшифровка
1
Ace
Добрый !

Прошу помощи по перехвату и обработке ошибок из СОМ-объектов
Нашел на форуме упоминание про перехват в питоне 2.4 в таком виде

try:
    .....
except pywintypes.com_error,e:
    print e
в питон 2.7 код тоже работает
Вопрос 1 - что же вывожится из объекта “е” ?
как добраться до его “свойств” ?

Вывод ошибки следующий (вопрос кодировки не ставится).
D:\Python v2-7>python.exe d:\fb-py4-2.py
(-2147352567, '\xce\xf8\xe8\xe1\xea\xe0.', (0, [b]u'SWbemLocator', u'\u041e\u0442\u
043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u
0435. '[/b], None, 0, -2147024891), None)

Интересуют отдельно данные “-2147352567”, источник ошибки ‘SWbemLocator’ и ее текстовое описание.

Вопрос 2 . В питоне 3 такой код в принципе не выполняется ?
   .....
except pywintypes.com_error,e:

Наверняка есть какаянить глобальная переменная с последней ошибкой (типа err в VBS), тока я про нее не знаю
reclosedev
Ace
Интересуют отдельно данные “-2147352567”, источник ошибки ‘SWbemLocator’ и ее текстовое описание.
Если документации нет, можно попробовать выяснить что находится в эксепшене через интроспекцию
except pywintypes.com_error as e:
    print dir(e)
    for name in dir(e):
        if not name.startswith('__'):
            print '%s: %r' % (name, getattr(e, name))
Результат (ошибка другая):
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', 'argerror', 'args', 'excepinfo', 'hresult', 'message', 'strerror']
argerror: None
args: (-2147352567, '\xce\xf8\xe8\xe1\xea\xe0.', (0, u'SWbemLocator', u'\u041e\u0442\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435. ', None, 0, -2147024891), None)
excepinfo: (0, u'SWbemLocator', u'\u041e\u0442\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u0435. ', None, 0, -2147024891)
hresult: -2147352567
message: ''
strerror: '\xce\xf8\xe8\xe1\xea\xe0.'
Т.е. номер - e.hresult, а SWbemLocator и текстовое описание находится в кортеже e.excepinfo.
>>> print e.excepinfo[1], e.excepinfo[2]
SWbemLocator Отказано в доступе. 

Ace
Вопрос 2 . В питоне 3 такой код в принципе не выполняется ?
В Py3 используется следующий синтаксис:
except pywintypes.com_error as e:
Py2.7 тоже его поддерживает.
Ace
Понял, попробую !
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