我喜欢Wing IDE。但是我在自动完成方面遇到了一些问题。例如,当我尝试编写此代码段时:
import socket
s = socket.socket()
s.connect(("rutracker.org",80))
s.send('GET / HTTP/1.0\n\n')
answer = s.recv(1024)
Wing帮我和自动填充socket.socket()
。但是当我输入send
时,它找不到像recv
或s.
这样的方法:
我做错了吗?
答案 0 :(得分:0)
这是因为socket.py中的SocketType或_socketobject是在运行时部分动态组合的,我们的静态分析引擎无法解释该代码(它位于Python 2.7.6中的socket.py的第226行,它在_socketmethods上进行迭代向_socketobject添加方法;位置可能因精确的Python版本而异,但它可能只是在所有这些的_socketobject的常规类def之后。)
解决这个问题的一种方法是在s = socket.socket()之后设置一个断点并运行它,然后auto-completer使用实时运行时状态,这样完整的内容就在那里。像这样工作还有一个好处,就是你可以在Wing IDE Pro的Debug Probe(一个在当前调试堆栈框架中运行的Python shell)中立即试用代码。
我还将看看我们是否可以针对静态分析案例进行改进。对于某些事情,我们确实有手动覆盖,这种情况似乎应该添加。