1. 程式人生 > >Python 3.7 下 Twisted相容問題

Python 3.7 下 Twisted相容問題

Python 3.7 下 Twisted相容問題

問題描述

最近學Scrapy,想著用最新的python版本趕個時髦,畢竟官網釋出的版本顯示是支援了py37的,然鵝,沒想到我還是太年輕,就算scrapy支援了,但是twisted還是涼著的,於是在執行官網tutorial的時候,有了下面的錯誤:

File "D:\Python37\lib\site-packages\scrapy\extensions\telnet.py", line 12, in <module>
    from twisted.conch import manhole, telnet
File "D:\Python37\lib\site-packages\twisted\conch\manhole.py"
, line 154 def write(self, data, async=False): ^ SyntaxError: invalid syntax

問題解決

在上面的報錯中,可以看到,錯誤來源很是奇怪,報的是語法錯誤,辛虧我早先有看過py37的新特性,早先在py35發行時就提出的PEP 492提案,終於在py37中正式生效(以前的版本中也有,但是得from __future__ import generator_stop)。在這個提案中,有一條就是:將協程的概念從生成器中拎了出來,並添加了新的關鍵詞async\await

。到這裡終於明白了,錯誤就來自這:asyncpy37的關鍵詞,不能作為關鍵字引數。修改方法也很簡單,把Python37\lib\site-packages\twisted\conch\manhole.py中全部的async修改為其他非py37關鍵詞的名稱。

問題解決,放煙花。

補充

在最近剛發行的18.9版本中已經修復了這個問題