Python Business SDK Facebook использует зарезервированное ключевое слово - обходной путь? - PullRequest
0 голосов
/ 13 декабря 2018

В 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 ]

0 голосов
/ 13 декабря 2018

Очевидно, что этот модуль не поддерживает 3.7.Таким образом, вы делаете, как всегда, когда поставщик не предоставляет поддержку: отредактируйте и / или разветвите его.

Например, замените async -> async_ на кодовой базе модуля, как в Ошибка при сборкеTclTk в 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)
'
0 голосов
/ 04 апреля 2019

В итоге я просто перебрал все файлы и заменил все экземпляры 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)
0 голосов
/ 13 декабря 2018

Если вы думаете, что в SDK есть подлинная проблема, не могли бы вы просто sudo cd тут же отредактировать ее?

Если вы можете, то самый простой вариант - просто просмотреть каждый экземпляр async и проверить, является ли она переменной async, а затем заменить ее, если она есть.

...