【问题标题】:Facebook's Python Business SDK uses a reserved keyword -- workaround?Facebook 的 Python Business SDK 使用了一个保留关键字——解决方法?
【发布时间】:2026-01-01 20:45:01
【问题描述】:

在 Python 3.7 中,

from facebookads.adobjects.adlabel import AdLabel 

结果

Traceback (most recent call last):
  File "/Users/mohan/growth-tools/facebook-experiment/main.py", line 4, in <module>
    from facebookads.adobjects.adlabel import AdLabel
  File "/Users/mohan/growth-tools/facebook-experiment/venv/lib/python3.7/site-packages/facebookads/adobjects/adlabel.py", line 22, in <module>
    from facebookads.adobjects.abstractcrudobject import AbstractCrudObject
  File "/Users/mohan/growth-tools/facebook-experiment/venv/lib/python3.7/site-packages/facebookads/adobjects/abstractcrudobject.py", line 564
    params=None, async=False, include_summary=True,
                     ^
SyntaxError: invalid syntax

我认为,从 Python 3.7 开始,async 已成为保留关键字。有什么解决方法可以让我继续使用这个 SDK?

【问题讨论】:

  • 您对该问题的推测是正确的。使用 3.6 直到他们修补它。或者编辑源。请注意,3.7 还不稳定。如果你想生活在最前沿,你可能会被削减。
  • @PedroLobito 3.7rc2 change log 另有说法。
  • 你是对的,但是文档页面没有显示,只有更改日志。谢谢你指出。
  • @PedroLobito 不用担心。正如我对 OP 所说,这很模糊,因为我们实际上并不是在谈论稳定版本,

标签: python facebook-python-business-sdk


【解决方案1】:

很明显,这个模块不支持 3.7。因此,在供应商不提供支持的情况下,您将一如既往:对其进行编辑和/或分叉。

例如在模块的代码库中替换async -> async_,如Error when building TclTk in Visual Studio 2017

$ find /Users/mohan/growth-tools/facebook-experiment/venv/lib/python3.7/site-packages/facebookads \
! -type d -a -name '*.py' -print0 |\
xargs -0 python -c '
import sys,re
for fname in sys.argv[1:]:
 with open(fname,"rb") as f: l=f.read()
 (r,n)=re.subn(r"\b(async)\b",r"\1_",l)
 if n>0:
  with open(fname,"wb") as f: f.write(r)
'

【讨论】:

    【解决方案2】:

    如果您认为 SDK 确实存在问题,您可以在此处sudo cd 然后编辑它吗?

    如果可以,那么最简单的选择就是遍历async 的每个实例并检查它是否是async 变量,如果是则替换它。

    【讨论】:

      【解决方案3】:

      我最终只是遍历了所有文件并将任何“async”实例替换为“async_”,我的解决方案如下:

      import os, re
      path = r"path\to\facebookads"
      
      python_files = []
      
      for dirpath, dirnames, filenames in os.walk(path):
          for filename in filenames:
              if filename.endswith(".py"):
                  python_files.append(os.path.join(dirpath, filename))
      
      for python_file in python_files:
      
          with open(python_file, "r") as f:
              text = f.read()
              revised_text = re.sub("async", "async_", text)
      
          with open(python_file, "w") as f:
              f.write(revised_text)
      

      【讨论】:

        【解决方案4】:

        Facebook已为 python 库修复此问题,请改用 is_asyc,如图所示 here

        【讨论】:

          【解决方案5】:

          尝试使用facebook_business 而不是facebookads。另见this related answer

          【讨论】:

            最近更新 更多