【发布时间】:2021-01-31 10:30:47
【问题描述】:
看起来 Python 有一个不能用作方法名称的保留关键字列表。例如,
class A:
def finally(self):
return 0
返回SyntaxError: invalid syntax。 getattr/setattr 可以解决这个问题,
class A:
pass
setattr(A, 'finally', lambda self: 0)
a = A()
print(getattr(a, "finally")())
工作正常。但是,a.finally() 仍然会生成 SyntaxError: invalid syntax。
有办法避免吗?更具体地说,从源代码(或代码补丁)编译 CPython 3.8 时是否有一些设置可以避免此错误?
请注意,PyPy 3 中也会发生同样的错误。
上下文是在 Pyodide 中,将 CPython 构建到 WebAssembly,可以将 Javascripts 对象传递给 Python。由于目前的限制,目前,像 Promise.new(...).then(...).finally(...) 这样的 Python 代码会出现语法错误(参见 GH-pyodide#769)
【问题讨论】:
-
Javascript 在某些情况下不遗余力地允许关键字作为标识符,但 Python 不允许,而且我知道的大多数语言都不允许。 Python 也没有 C# 的 verbatim identifier 语法。如果您直接生成字节码,您正在寻找的可能是可能的,但在源代码级别,不。
标签: python syntax-error cpython pyodide