我有一个基于 PyQt4 的大型 Python 程序。在某些地方,它需要能够控制制造商为其提供 .net 接口的硬件。如果相关库可用,我需要能够加载它,否则忽略它。
如果库不存在,并且我尝试报告异常,那么 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 连接,以保证将来不会发生这种事情?任何想法为什么会发生这个问题?