Google ads api 服务\uuuu len\uuuuu未发现意外错误,已安全恢复

Google ads api 服务\uuuu len\uuuuu未发现意外错误,已安全恢复,google-ads-api,Google Ads Api,蟒蛇3.8 我的代码: from googleads import adwords def execute_request(): adwords_client = adwords.AdWordsClient.LoadFromStorage(path="google_general/googleads.yaml") campaign_service = adwords_client.GetService('CampaignService', version='v201809')

蟒蛇3.8

我的代码:

from googleads import adwords

def execute_request():
    adwords_client = adwords.AdWordsClient.LoadFromStorage(path="google_general/googleads.yaml")
    campaign_service = adwords_client.GetService('CampaignService', version='v201809')
    pass


context["dict_list"] = execute_request()
Traceback (most recent call last):
  File "/home/michael/pycharm-community-2019.3.2/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 282, in frame_vars_to_xml
    xml += var_to_xml(v, str(k), evaluate_full_value=eval_full_val)
  File "/home/michael/pycharm-community-2019.3.2/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 369, in var_to_xml
    elif hasattr(v, "__len__") and not is_string(v):
  File "/home/michael/PycharmProjects/ads3/venv/lib/python3.8/site-packages/googleads/common.py", line 694, in __getattr__
    raise googleads.errors.GoogleAdsValueError('Service %s not found' % attr)
googleads.errors.GoogleAdsValueError: Service __len__ not found
Unexpected error, recovered safely.
回溯:

from googleads import adwords

def execute_request():
    adwords_client = adwords.AdWordsClient.LoadFromStorage(path="google_general/googleads.yaml")
    campaign_service = adwords_client.GetService('CampaignService', version='v201809')
    pass


context["dict_list"] = execute_request()
Traceback (most recent call last):
  File "/home/michael/pycharm-community-2019.3.2/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 282, in frame_vars_to_xml
    xml += var_to_xml(v, str(k), evaluate_full_value=eval_full_val)
  File "/home/michael/pycharm-community-2019.3.2/plugins/python-ce/helpers/pydev/_pydevd_bundle/pydevd_xml.py", line 369, in var_to_xml
    elif hasattr(v, "__len__") and not is_string(v):
  File "/home/michael/PycharmProjects/ads3/venv/lib/python3.8/site-packages/googleads/common.py", line 694, in __getattr__
    raise googleads.errors.GoogleAdsValueError('Service %s not found' % attr)
googleads.errors.GoogleAdsValueError: Service __len__ not found
Unexpected error, recovered safely.
googleads.yaml关于日志记录的信息

logging:
  version: 1
  disable_existing_loggers: False
  formatters:
    default_fmt:
      format: ext://googleads.util.LOGGER_FORMAT
    handlers:
      default_handler:
        class: logging.StreamHandler
        formatter: default_fmt
        level: DEBUG
    loggers:
    # Configure root logger
      "":
      handlers: [default_handler]
      level: DEBUG
我刚刚开始研究API。 也就是说,我正在尝试执行我的第一个请求()


你能帮我解决这个问题吗?至少如何更精确地对其进行本地化。

这似乎是一个问题,其原因是PyCharm调试器在调试期间检查活动对象的方式

具体地说,它检查给定对象在
var\u to\u xml
的代码中是否具有
\uu len\uuu
属性/方法,最有可能为调试器接口确定对象的适当表示(这似乎需要构造xml表示)

googleads
服务对象,例如您的
campaign\u服务
,但是,使用一些魔法可以在它们上调用已定义的SOAP方法,而无需对所有这些方法进行硬编码。代码如下所示:

def\uu getattr\uuu(self,attr):
“”“支持服务。方法()语法。”“”
如果采用自组织方法(attr):
如果attr不在self.\u方法\u代理中:
self.\u方法\u代理[attr]=self.\u创建方法(attr)
返回self.\u方法\u代理[attr]
其他:
raise GOGLEADS.errors.GOGLEADSVALUERROR('找不到服务%s'%attr]
这意味着调试器对潜在的
\uuuu len\uuu
属性的检查被拦截,并且由于没有名为
\uuuu len\uu
的SOAP操作,因此引发异常

您可以通过以常规方式运行代码段(即不调试代码段)并检查其是否有效来验证这一点


实际的修复似乎需要PyCharm的调试器改变它检查对象的方式(不调用hasattr(v,“\uu len\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu”),或者
Googleds
修改它实现的方式,例如,通过实际实现一个只引发
属性错误的
方法,dorian,您好。谢谢你的回答。但是你建议用什么IDE来代替PyCharm?PyCharm的bug tracker解决方案中的对应问题是编辑调试器源代码,并用try/except将有问题的地方包装起来,直到下一次更新@Michael,我自己使用PyCharm。JetBrains非常在意在这里直接发表评论,这一事实验证了这一选择:)