gpt4 book ai didi

Python处理.net异常导致PyQt无法使用OLE

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:57 27 4
gpt4 key购买 nike

我有一个基于 PyQt4 的大型 Python 程序。在某些地方,它需要能够控制制造商为其提供 .net 接口(interface)的硬件。我需要能够加载相关库(如果可用),否则忽略它。

如果库不存在,而我尝试报告异常,那么 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 block ),代码也能正常运行。不知何故,试图查看异常会弄乱 .net 界面。

在尝试将库添加为引用之前,是否有更好的方法来检查库是否存在?有什么方法可以在运行 QApplication 之前重置 .net 连接,以保证将来不会发生这种事情?知道为什么会发生这个问题吗?

最佳答案

有比 clr.AddReference() 更好的方法 - 该方法称为 clr.FindAssembly('DOT_NET_Assembly_Name'),它返回程序集的完整路径或

关于Python处理.net异常导致PyQt无法使用OLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31989950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com