Похоже, это проблема, возникающая из-за того, что отладчик PyCharm проверяет живые объекты во время отладки.
В частности, он проверяет, имеет ли данный объект атрибут / метод __len__
в коде var_to_xml
, скорее всего, для определения подходящего представления объекта для интерфейса отладчика (который, по-видимому, требует построения XML представления).
googleads
сервисных объектов, таких как ваш campaign_service
, однако, используйте маги c, чтобы иметь возможность вызывать определенные методы SOAP для них, не требуя жесткого их кодирования. Код выглядит следующим образом:
def __getattr__(self, attr):
"""Support service.method() syntax."""
if self._WsdlHasMethod(attr):
if attr not in self._method_proxies:
self._method_proxies[attr] = self._CreateMethod(attr)
return self._method_proxies[attr]
else:
raise googleads.errors.GoogleAdsValueError('Service %s not found' % attr)
Это означает, что проверка отладчиком потенциального атрибута __len__
перехвачена, и потому что CampaignService не имеет операции SOAP, вызываемой __len__
, возникает исключение.
Вы можете проверить это, выполнив обычный фрагмент (т.е. не отлаживая его) и проверив, работает ли он.
Может показаться, что исправлено либо требовать, чтобы отладчик PyCharm изменил способ проверки объектов (не вызывая hasattr(v, "__len__")
), либо чтобы googleads
изменил способ, которым он реализует __getattr__
, например, путем фактической реализации метода __len__
, который просто вызывает AttributeError
.