python3.6ast模块不识别异步方法

2024-10-08 18:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

TranscryptPython-to-JavaScript编译器中实现协程时,我遇到了以下奇怪的问题。在

Transcrypt使用cpython3.6的本机解析器来生成AST。 对于异步全局函数def,它生成一个AsyncFunctionDef节点。 但对于异步方法则不然! 然而,CPython本身似乎正确地编译了异步方法。在

因此,下面的代码是用CPython运行的,但是Transcrypt无法运行它,因为CPython的AST模块生成的AST似乎缺少用于方法的AsyncFunctionDef节点(与全局函数相反)。在

因此,以下代码不生成AsyncFunctionDef节点:

class C:
    def __init__ (self):
        self.aTime = 2

    async def g (self, waw, asio):
        print ('g0')
        await waw (self.aTime, asio)
        print ('g1')

我错过了什么?异步方法是官方支持的,不是吗? 在PEP 492中找不到任何特定内容。在

示例的完整代码是:

^{pr2}$

Tags: 方法函数代码self节点defastcpython
1条回答
网友
1楼 · 发布于 2024-10-08 18:31:01

最终我让解析器正常工作。 我一定是在别的地方阻止了解析。 可能我忘了从树上更高的节点调用visit。 不幸的是,我再也不能重现这个问题了。在

对于感兴趣的用户,解析器代码位于:

https://github.com/QQuick/Transcrypt/blob/master/transcrypt/modules/org/transcrypt/compiler.py

2045号线。在

最重要的是:Python的ast模块工作得很好,尽管它需要更多的文档。在

有一个(相当紧凑但可用)第三方文档:

https://greentreesnakes.readthedocs.io/en/latest/

相关问题 更多 >

    热门问题