При написании кода Python (3.12.2) для взаимодействия с Adobe Illustrator через WIN32COM (Windows 10) я иногда аварийно завершаю работу Illustrator с ошибками «вызова чисто виртуальной функции».
Вот пример строки кода, вызывающей такой сбой:
font_size = text_frame.TextRange.CharacterAttributes.Size
Просто попытка доступа к свойству Size приводит к сбою. Однако этим двум строкам семантически эквивалентного кода удается избежать сбоев:
text_range = text_frame.TextRange
font_size = text_range.CharacterAttributes.Size
Я надеюсь, что кто-то, кто знаком с тонкостями программирования WIN32COM, сможет провести меня на средней глубине в технические тонкости взаимодействия с COM-объектами и, возможно, объяснить, почему разрывается цепочка доступа. на две части заставляет код работать. Я хотел бы иметь возможность предвидеть, когда это произойдет, чтобы иметь возможность писать работающий код, не натыкаясь на это минное поле каждый раз, когда я пытаюсь получить доступ к чему-то новому из объектной модели Illustrator.
Полная отслеживание исключений выглядит следующим образом:
Traceback (most recent call last):
File "C:\Users\John\PycharmProjects\Adobe API\Short Grain 500 Hex Coordinates.py", line 83, in
main()
File "C:\Users\John\PycharmProjects\Adobe API\Short Grain 500 Hex Coordinates.py", line 21, in main
original = OriginalTextInfo(item)
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\John\PycharmProjects\Adobe API\hex_coord.py", line 10, in __init__
self.font_size = item.TextRange.CharacterAttributes.Size
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\John\PycharmProjects\venv\Lib\site-packages\win32com\client\__init__.py", line 585, in __getattr__
return self._ApplyTypes_(*args)
^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\John\PycharmProjects\venv\Lib\site-packages\win32com\client\__init__.py", line 574, in _ApplyTypes_
self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pywintypes.com_error: (-2147023170, 'The remote procedure call failed.', None, None)
Подробнее здесь: https://stackoverflow.com/questions/782 ... obe-illust
Как избежать ошибок «чистого вызова виртуальной функции» при программировании Adobe Illustrator через WIN32COM с Python? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение