本文将带您了解关于有没有办法在pywin32中解码数字COM错误代码的新内容,同时我们还将为您解释python解码错误的相关知识,另外,我们还将为您提供关于linux–有没有办法在Glibv2.32中
本文将带您了解关于有没有办法在pywin32中解码数字COM错误代码的新内容,同时我们还将为您解释python解码错误的相关知识,另外,我们还将为您提供关于linux – 有没有办法在Glib v2.32中设置线程优先级?、pycharm 无法import win32api、win32con、win32com、win32gui 问题一次解决!、Python新手问 pywin32中的win32com的client使用问题、PyWin32使用MakePy实用程序和win32com来获取networking统计信息的实用信息。
本文目录一览:- 有没有办法在pywin32中解码数字COM错误代码(python解码错误)
- linux – 有没有办法在Glib v2.32中设置线程优先级?
- pycharm 无法import win32api、win32con、win32com、win32gui 问题一次解决!
- Python新手问 pywin32中的win32com的client使用问题
- PyWin32使用MakePy实用程序和win32com来获取networking统计信息
有没有办法在pywin32中解码数字COM错误代码(python解码错误)
这是最近运行的用Python编写的不可靠应用程序的堆栈跟踪的一部分,该应用程序控制了用Excel编写的另一个应用程序:
pywintypes.com_error: (-2147352567, ''Exception occurred.'', (0, None, None, None, 0, -2146788248), None)
显然出了点问题……但是什么?[1]这些COM错误代码似乎过于含糊。
如何解码此错误消息?是否有一张桌子可以让我将数字错误代码转换为更有意义的内容?
[1]我实际上知道在这种情况下出了什么问题,它试图访问不具有Name属性的Range对象上的Name属性,但并非所有的bug都很容易找到!
答案1
小编典典您没有做错任何事。堆栈跟踪中的第一项(数字)是COM对象返回的错误代码。第二项是与错误代码关联的描述,在这种情况下为“发生异常”。pywintypes.com_error已经为您调用了win32api.FormatMessage(errCode)的等效项。我们将在一分钟内查看第二个数字。
顺便说一句,您可以使用Visual Studio(C:\ Program Files \ Microsoft Visual Studio 9.0 \
Common7 \ Tools \ ErrLook.exe)附带的“错误查找”实用程序作为快速启动垫来检查COM错误代码。
该实用程序还会为您调用FormatMessage并显示结果。并非所有的错误代码都可以使用这种机制,但是很多都可以。那通常是我的第一站。
COM中的错误处理和报告有点混乱。我将尽力为您提供一些背景知识。
所有COM方法调用都将返回一个称为HRESULT的数字代码,该代码可以指示成功或失败。COM中所有形式的错误报告都基于此。
这些代码通常以十六进制表示,尽管有时您会看到它们是32位大数字,就像在堆栈跟踪中一样。对于常见的结果和问题,有各种预定义的返回代码,或者对象可以在特殊情况下返回自定义数字代码。例如,值0(称为S_OK)通常表示“无错误”,而0x80000002为E_OUTOFMEMORY。有时,HRESULT代码由对象返回,有时由COM基础结构返回。
通过实现名为IErrorInfo的接口,COM对象还可以选择提供更多的错误信息。当对象实现IErrorInfo时,它可以提供有关所发生情况的各种详细信息,例如详细的自定义错误消息,甚至是描述问题的帮助文件的名称。在VB6和VBA中。该Err
对象允许您访问所有这些信息(Err.Description
,等)。
使事情复杂化的是,后期绑定的COM对象(使用称为COM
Automation或IDispatch的机制)添加了一些层,这些层需要剥离才能获取信息。Excel通常通过后期绑定进行操作。
现在,让我们再次查看您的情况。作为第一个数字,您得到的是一个相当通用的错误代码:DISP_E_EXCEPTION。
注意:您通常可以通过搜索数字来找出HRESULT的正式名称,尽管有时您必须使用十六进制版本才能找到有用的内容。
以DISP_开头的错误是IDISPATCH错误代码。该错误松散地表示“对象抛出了COM异常”,并在其他位置打包了更多信息(尽管我不太清楚该在哪里;我必须查找它)。
据我对pywintypes.com_error的了解,消息中的最后一个数字是该对象在异常期间返回的实际错误代码。这是您从VBA中获得的实际数字代码Err.Number
。
不幸的是,第二个代码-2146788248(0x800A9C68)处于为自定义应用程序定义的错误消息保留的范围(在VBA中:)VbObjectError+ someCustomErrorNumber
,因此没有集中的含义。对于不同的程序,相同的数字可能意味着完全不同的事物。
在这种情况下,我们已经走到了尽头:
错误代码是“自定义”,应用程序需要记录它是什么,除了Excel不需要。另外,Excel(或错误的实际来源)似乎没有通过IErrorInfo提供更多信息。
Excel臭名昭著(至少对我而言)是来自自动化的隐秘错误代码以及导致它们的晦涩难懂的情况。对于那些可以考虑“设计时错误”的错误尤其如此(“您应该比调用对象中不存在的方法更了解”)。而不是一个不错的“无法读取Name属性”,您会收到“
运行时错误‘1004’:应用程序定义或对象定义的错误
”(我只是通过尝试从VBA访问Range上的Name属性而获得的在Excel中)。那不是很有帮助。
该问题未在Python上解决,或未在Excel上解决。Excel本身甚至无法向VBA解释发生了什么。
但是,上面的一般过程仍然有效。如果以后再收到Excel错误,则可能会收到更好的错误消息,您可以用相同的方式进行跟踪。
祝好运!
linux – 有没有办法在Glib v2.32中设置线程优先级?
那么在2.32 API中为可能的线程分配优先级呢?如果是,如何在创建时执行此操作,是否可以在创建线程后更改它?我知道pthread支持所有这些,但我更喜欢坚持与平台无关的Glib API.
解决方法
GThread: deprecate thread priorities
Thread priorities were already documented as not working on Solaris,and they are meaningless on Linux unless the process separately requests realtime scheduling (and even then,it appears only to work as root).
也许使用线程池,g_thread_pool_set_sort_function ()
可能没问题?
pycharm 无法import win32api、win32con、win32com、win32gui 问题一次解决!
最近写项目发现python pycharm 导入 win32api、win32con、win32com、win32gui 等win32相关的包都会出现或多或少问题,Google一大堆不靠谱的方法试了个遍。
特此记录一下解决办法
1.检查是否安装在项目的环境中
如果你本地有多个运行环境,同时你的库装设置在path路径上的了就会导致该错误。
pycharm默认创建项目的时候都会自动创建python环境。你可以在项目依赖的环境上面去重新安装,或者把运行环境设置为path路径上的。
2.解决问题
如果你未尝试过直接 pip install win32XX
请先尝试能否直接安装
如果你尝试过直接 pip install ,同时出现类似ModuleNotFoundError: No module named ''win32XX''
、Getting requirements to build wheel did not run successfully.
的相关报错,请接着看
判断你的python版本
出现以上相关报错一般是 python 版本过高或者 python 版本与库不兼容导致。
同时自2017年底以来,win32gui 似乎被称为/已经成为 pywin32
所以一般 python 版本大于 3.6 后就会出现类似报错
解决办法
- 降低您的python 版本或者寻找与版本兼容的库版本(麻烦,下下策)
- 尝试安装 pywin32 库
pip install pywin32
pywin32 补充说明
pywin32 它直接接包装了几乎所有的 Windows API ,可以方便地从 Python 直接调用
因此它也理所应当的包括 win32api、win32con、win32com、win32gui 等win32相关的 Windows API,直接安装pywin32即可,安转完重新导入索引即可解决问题
其他情况
pypiwin32
如果你安装的pywin32版本高于223,那就要同时安装 Pypiwin32,才能确保所有模块能正常工作pip install pypiwin32
确保没有依赖关系冲突
如果你的本地环境同时存在 Conda ,或者其他依赖关系冲突,请自行查看并解决
conda环境
如果你的项目是运行在 conda 环境中
请尝试使用 conda 来安装库,而不是pip来安装pywin32conda install pywin32
这就是我排除问题的流程,希望可以能够帮到你,也同时记录一下。
Python新手问 pywin32中的win32com的client使用问题
环境: python 3.7 + win10 + pyCharm
我仿照https://blog.csdn.net/b0207191/article/details/88600001 此文
编写如下代码时, 发现word变量中没有Documents对象, 只有如下图1所示的这类的方法和变量.
from win32com import client as wc
word = wc.Dispatch(''Word.Application'')
doc = word.Documents.Open(openfile)
图1
pywin32在pyCharm的Terminal执行"pip install pywin32"安装的 pywin32版本是225.
初学Python, 不知此问题该如何排查, 求思路
PyWin32使用MakePy实用程序和win32com来获取networking统计信息
这个问题是对我以前的问题的继续。
我正在尝试使用PyWin32获取我的Windows 7系统的Network Statistics 。
我遵循的步骤是:
1)运行COM MakePy utility并在network list manager 1.0 type library下selectnetwork list manager 1.0 type librarytypes库。
确保生成的进程的窗口在主应用程序的前面?
在“docker build”命令中,windows“C:/ Users / <username> /”目录不可见
在Rmd文件中包含apsrtable(或stargazer)输出
抓住Windowsterminalclosures正在运行的进程
在sed中用单个标签replace标签
2)上面的过程生成了这个python文件 。
接下来我创build了类NetworkListManager(CoClassBaseClass)使用对象
import win32com.client as wc obj = wc.dispatch("{DCB00C01-570F-4A9B-8D69-199fdbA5723B}")
现在我试图访问由上面创build的对象obj提供的方法。
help(obj)给了我
GetNetwork(self,gdNetworkId = <PyOleEmpty object> )
Get a network given a Network ID.
已连接
Returns whether connected to internet or not //Other methods removed
所以,现在当我使用
>>> obj.IsConnected True
它工作正常。
现在我面临的问题是如何使用GetNetowrk方法,因为当我尝试使用它
>>> obj.GetNetwork() Traceback (most recent call last): File "<interactive input>",line 1,in <module> ret = self._oleobj_.InvokeTypes(2,LCID,1,(9,0),((36,1),),gdNetworkId com_error: (-2147024809,'The parameter is incorrect.',None,None)
我也尝试使用pythoncom.Empty创buildPyOleEmpty object ,并将其作为parameter passing,但没有运气。
我明白GetNetwork需要NetworkID作为参数,但方法GetNetworkId在INetwork类中定义。
所以我的问题是如何使用不使用MakePy utility创build的python文件中定义的类。
如何一致地重播一个事件列表
如何检查一个Linux文件(.so)是从Windows机器32或64位
javac自己工作,但不能与scons一起工作
为什么os.path.getsize给我错误的大小?
在Windows 8上使用PHP 5.6启用CURL
它看起来像到达网络对象的方式是使用GetNetworks枚举它们:
networks=obj.GetNetworks(win32com.client.constants.NLM_ENUM_NETWORK_CONNECTED) for network in networks: print (network.GetName(),network.GetDescription())
使用网络ID将是有问题的。 他们被定义为原始结构,所以他们将需要通过使用记录。 Pywin32对IRecordInfo接口的支持仍然有点弱。
我们今天的关于有没有办法在pywin32中解码数字COM错误代码和python解码错误的分享已经告一段落,感谢您的关注,如果您想了解更多关于linux – 有没有办法在Glib v2.32中设置线程优先级?、pycharm 无法import win32api、win32con、win32com、win32gui 问题一次解决!、Python新手问 pywin32中的win32com的client使用问题、PyWin32使用MakePy实用程序和win32com来获取networking统计信息的相关信息,请在本站查询。
本文标签: