gpt4 book ai didi

Python DispatchWithEvents 导致属性错误 :

转载 作者:行者123 更新时间:2023-12-02 00:01:18 26 4
gpt4 key购买 nike

使用调度作为win32com.client.Dispatch工作正常,但会从DispatchWithEvents调用win32com.client.WithEvents产生属性错误:,问题一直存在,直到删除 Temp\gen_py 文件夹

我可以在导入 win32com.client 之前从一开始就删除 Temp\gen_py 文件夹

path=r"C:\Users\omc\AppData\Local\Temp\gen_py"
rmtree(path, ignore_errors=True)
while os.path.exists(path):
pass

在我的测试中的第一次迭代中工作正常,但对于相同代码的第二次迭代会产生属性错误:

from shutil import rmtree
path=r"C:\Users\omc\AppData\Local\Temp\gen_py"
rmtree(path, ignore_errors=True)
while os.path.exists(path):
pass
import win32com.client

class CanoeTestModuleEvents(object):
"""Handler for CANoe TestModule events"""
def OnStart(self):
print("< Test Module started >")
bTestModuleRunning = True
def OnStop(self,Reason) :
print("< Test Module stopped >")
bTestModuleRunning = False
if Reason == 0:
print("Test module was executed completely")
else:
if Reason== 1:
print("Test module was stopped by the user")
else:
print("Test module was stopped by measurement stop")


APP = win32com.client.Dispatch("CANoe.Application")
App.load("CANoeApplication.cfg")

# ---------------------------------------------------------------
# TestEnvironment Item(2)
# ---------------------------------------------------------------
TestEnvironment = self.App.Configuration.TestSetup.TestEnvironments.Item(1)
TestModule = self.TestEnvironment.Items.Item(2)
TestModule.TestVariant = TestVariant
App.Measurement.Start()
WaitForMeasurementStart()

win32com.client.WithEvents(TestModule, CanoeTestModuleEvents)
if MeasurementRunning():
TestModule.Start()
WaitForTestModuleStart()

while app.bTestModuleRunning == True:
pythoncom.PumpWaitingMessages()
time.sleep(.1)

App.Measurement.Stop()

# ---------------------------------------------------------------
# TestEnvironment Item(3)
# ---------------------------------------------------------------
TestEnvironment = self.App.Configuration.TestSetup.TestEnvironments.Item(1)
TestModule = self.TestEnvironment.Items.Item(3)
TestModule.TestVariant = TestVariant
App.Measurement.Start()
WaitForMeasurementStart()

win32com.client.WithEvents(TestModule, CanoeTestModuleEvents)
if MeasurementRunning():
TestModule.Start()
WaitForTestModuleStart()

while app.bTestModuleRunning == True:
pythoncom.PumpWaitingMessages()
time.sleep(.1)

App.Measurement.Stop()

属性错误:对象没有属性

AttributeError: '<win32com.gen_py.CANoe 8.5 Type Library.ITestSetupItem instance at 0x49756368>' object has no attribute 'TestVariant'

最佳答案

此属性错误的主要原因是您的 COM 服务器已从后期绑定(bind)(动态)转变为早期绑定(bind)(静态)。

  • 在后期绑定(bind)中,每当调用方法时,都会在对象中查询该方法,如果成功,则可以进行调用。
  • 在早期绑定(bind)中,对象模型的信息是根据对象调用提供的类型信息预先确定的。早期绑定(bind)使用 MakePy。此外,早期绑定(bind)区分大小写。

有两种方法可以解决此问题:

  1. 使用动态模块强制您的代码以面向后期绑定(bind)的方式工作。使用示例:

    "win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()" 
  2. 使用驼峰式敏感关键字来实现早期绑定(bind)方式。使用示例:

    "excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"

此外,我认为默认情况下使用早期绑定(bind)依赖方法每次都会创建 gen_py 文件夹。

关于Python DispatchWithEvents 导致属性错误 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49901131/

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