Facebook的Python Business SDK使用保留关键字 - 解决方法?



在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

问题是,我认为async已经成为Python 3.7的保留关键字。有什么变通方法可以让我继续使用这个SDK吗?

很明显,这个模块不支持3.7。因此,在供应商不提供支持的地方,您可以一如既往地进行编辑和/或分叉。

例如,在Visual Studio 2017中构建TclTk时,将模块代码库中的async->async_替换为错误:

$ 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)
'

如果你认为SDK有真正的问题,你不能只在那里sudo cd然后编辑它吗?

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

我最终只是循环浏览了所有文件,并将"async"的任何实例替换为"async_",我的解决方案如下:

import os, re
path = r"pathtofacebookads"
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)

Facebook已经为python库修复了这一问题,请使用is_asyc,如下所示。

尝试facebook_business而不是facebookads。另请参阅此相关答案。

相关内容

最新更新