4

我有一个基于 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 连接,以保证将来不会发生这种事情?任何想法为什么会发生这个问题?

4

1 回答 1

2

有比尝试更好的方法clr.AddReference()- 调用clr.FindAssembly('DOT_NET_Assembly_Name')该方法返回程序集的完整路径或None.

于 2015-09-07T05:50:24.010 回答