我有一個基於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」替換except塊),代碼也可以正常運行。不知何故,試圖看到異常混亂了.net界面。
有沒有更好的方法來檢查一個庫是否存在,然後再嘗試添加它作爲參考?在運行QApplication之前,是否有任何方法可以重置.net連接,以確保這種事情在未來不會發生?任何想法爲什麼發生這個問題?
謝謝,這絕對是一個很好的建議。但是,它並沒有真正回答這個問題。爲什麼捕獲並打印通過嘗試添加不存在的庫而生成的異常會導致OLE初始化錯誤? – jmizrahi
它回答你的3個問題中的第一個,並解決問題。根本原因是另一回事。你在github上發佈了一個問題嗎? – denfromufa