Wing IDE не отображает все методы в автозаполнении

Мне нравится Wing IDE. Но у меня есть некоторые проблемы с автозаполнением. Например, когда я пытаюсь написать этот фрагмент кода:

import socket

s = socket.socket()
s.connect(("rutracker.org",80))
s.send('GET / HTTP/1.0\n\n')
answer = s.recv(1024)

Крыло мне помогает и автозаполнение socket.socket(), Но он не находит такие методы, как send или же recv когда я печатаю s.:

Первыйвторой

Я делаю что-то не так?

1 ответ

Это связано с тем, что SocketType или _socketobject в socket.py частично динамически собирается во время выполнения, и наш механизм статического анализа не может интерпретировать этот код (он находится в строке 226 socket.py в Python 2.7.6, где он перебирает _socketmethods для добавления методов в _socketobject; местоположение может отличаться в зависимости от конкретной версии Python, но, вероятно, это происходит сразу после обычного определения класса _socketobject во всех них).

Один из способов справиться с этим - установить точку останова после s = socket.socket() и запустить ее, а затем автозаполнитель использует состояние реального времени выполнения, поэтому все содержимое будет там. Такая работа также имеет то преимущество, что вы можете сразу попробовать код в Debug Probe Wing IDE Pro (оболочка Python, которая работает в текущем фрейме стека отладки).

Я также посмотрю, сможем ли мы улучшить это для случая статического анализа. У нас есть ручные переопределения для некоторых вещей, и этот случай, кажется, должен быть добавлен.

Другие вопросы по тегам