2015-08-13 4 views
4

У меня есть большая программа на основе PyQt4 на основе Python. В некоторых местах он должен иметь возможность управлять аппаратным обеспечением, для которого производитель предоставляет интерфейс .net. Мне нужно иметь возможность загружать соответствующую библиотеку, если она доступна, и игнорировать ее в противном случае.Исключения для обработки Python .net делает PyQt неспособным использовать OLE

Если библиотеки нет, и я пытаюсь сообщить об исключении, то Qt сообщает об ошибке инициализации OLE, и все функции перетаскивания и копирования/вставки в моей программе завершаются с ошибкой.

Вот минимальный пример:

import clr 
import sys 
from PyQt4 import QtGui 
import logging 
logger = logging.getLogger(__name__) 

try: 
    clr.AddReference('foo') #This doesn't exist 
except Exception as e: 
    logger.info('Exception: {0}'.format(e)) 
app = QtGui.QApplication(sys.argv) 
app.exec_() 

Это приводит к ошибке Qt:

Qt: Could not initialize OLE (error 80010106) 

Программа работает, но всякий раз, когда я пытаюсь копировать/вставить, я получаю:

QClipboard::setMimeData: Failed to set data on clipboard() 

и перетаскивание не работает вообще.

Если библиотека существует, код запускается без проблем. Интересно, что если я не пытаюсь посмотреть на исключение (например, заменить исключающий блок на «pass»), код также отлично работает. Каким-то образом, пытаясь увидеть исключение, помешает интерфейс .net.

Есть ли лучший способ проверить, существует ли библиотека, прежде чем пытаться добавить ее в качестве ссылки? Есть ли способ сбросить соединение .net перед запуском QApplication, чтобы гарантировать, что такого рода вещи не произойдет в будущем? Любые идеи, почему эта проблема происходит?

ответ

2

Существует лучший способ, чем попробовать clr.AddReference() - метод называется clr.FindAssembly('DOT_NET_Assembly_Name'), который возвращает полный путь к сборке или None.

+0

Спасибо, это, безусловно, хорошее предложение. Однако на этот вопрос он не отвечает. Почему ловить и печатать исключение, созданное при попытке добавить несуществующую библиотеку, вызывают ошибку инициализации OLE? – jmizrahi

+0

отвечает на первый из ваших 3 вопросов и решает проблему. основная причина - еще одна история. Вы задали вопрос о github? – denfromufa

 Смежные вопросы

  • Нет связанных вопросов^_^