1

我喜欢 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()。但它没有找到类似sendrecv当我输入的方法s.

第一的第二

我做错了吗?

4

1 回答 1

0

这是因为 socket.py 中的 SocketType 或 _socketobject 是在运行时部分动态组装的,而我们的静态分析引擎无法解释该代码(它位于 Python 2.7.6 中 socket.py 的第 226 行,它迭代 _socketmethods 以添加方法到 _socketobject; 位置可能因确切的 Python 版本而异,但它可能就在所有 _socketobject 的常规类 def 之后)。

解决这个问题的一种方法是在 s = socket.socket() 之后设置一个断点并运行到它,然后自动完成器使用实时运行时状态,因此完整的内容将在那里。像这样工作还有一个优势,您可以立即在 Wing IDE Pro 的 Debug Probe(在当前调试堆栈框架中运行的 Python shell)中试用代码。

我还将看看我们是否可以针对静态分析案例改进这一点。我们确实对某些事情进行了手动覆盖,这种情况似乎应该添加。

于 2014-07-22T13:24:05.530 回答