2

PyDev で Eclipse (Galileo) を実行します。モジュール urllib2 を使用しようとしていますが、実験を始めたばかりです。私が行っているチュートリアルの 1 つは、私の urllib2.urlopen() クラスで geturl() を呼び出すように言っています。そうしましたが、期待どおりに機能しました。

しかし、Eclipse の便利な "ctrl+space" ショートカットを使用してクラス メソッドをブラウズしようとしたとき、私は驚きました。

ここに画像の説明を入力

を実行するとdir(page)、あらゆる種類のきちんとした方法で遊ぶことができます。

['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close', 'code', 'fileno', 'fp', 'getcode', 'geturl', 'headers', 'info', 'msg', 'next', 'read', 'readline', 'readlines', 'url']

これはEclipseの問題ですか?それともユーザーエラー?これを IDLE に入れると、IDLE のオートコンプリート機能を使用して利用可能なメソッドを確認できますが、同じ機能を PyDev で動作させることはできません。職場の PC では動作していると思いますが、自宅の PC (現在使用している PC) は「正常ではない」ようです。

Google/Stackoverflow でできる限り調べましたが、ここで何が問題なのかを理解するのに役立つ結果を返すキーワードがわかりません。あなたが提供できる洞察は素晴らしいでしょう!

(Python 2.6、Debian (#!) 仮想環境で実行、​​windows7 ホスト - いずれかが重要な場合)

注意: 私は Debian 側でのみ開発しているため、Win7 では Eclipse を使用していません。

更新1:

「ブラウザを下にスクロールすると、ブラウザは何で終了しますか?」と答えるには、subclasshookで終わります。リストの一番下がどのように見えるかについては、下の写真を参照してください(すべてプライベートです、メソッドなし)。

ここに画像の説明を入力

更新 2:

以前の投稿で示唆されたように、私は設定メニューに入り、オートコンプリート タブとインタープリター設定タブをチェックしました。ファイアウォール」またはファイアウォールがあることを示す任意の兆候。

ただし、別のテストを行いました。下の画像を参照してください。

ここに画像の説明を入力

のオートコンプリート機能は問題なく機能しwxます。以前の投稿で私に言われたことを誤解したのかもしれませんが、pageクラスに魔法のメソッドが表示されているのは、PyDev が他に何を入力すればよいかわからないためであることを理解しているため、明らかに混乱しています。ここからどこへ行けばいいのかわかりません。それまでの間、PyDev のドキュメントを読み続けて、解決できるかどうかを確認します。

そして、私はほとんど忘れていました - 私のコードで urllib2.urlopen() の上にマウスを置くと、doc 文字列が表示されます。この壊れていると思われる機能についての洞察が得られるかどうかはわかりません。

更新3:

PyDev での「強制ビルトイン」のみのオートコンプリートに関する誰かのコメントに従って、「urllib2」を強制ビルトインの設定の下に追加しました。以下は私が得ているものの画像です...

ここに画像の説明を入力

私はいくつかの新しいメソッドを持っています...しかし、私が期待していたものではありません(つまり__dict__、私が呼び出したときに取得したものdir(page)、特にgeturl()が表示されません)。

4

3 に答える 3

0

ドキュメントを読んだ場合:

コード補完を機能させるには、インタープリターを適切に構成する必要があることに注意することが重要です。ビルトインを取得するために、PyDev はシェルを生成します。そのため、ファイアウォールを使用すると、Eclipse からの通信がブロックされている場合にコード補完が機能しなくなる可能性があります。その殻に。

つまり、環境設定に移動して、「コード補完」設定と「インタープリター - Python」設定の両方を設定し、Eclipse がサブシェルを開始して、ファイアウォールなどなしでソケット経由で通信できることを確認する必要があります。邪魔になる。

私の推測では、これらのうち、インタープリターの設定が間違っている可能性が最も高いと思います。Python が通常の/usr/bin/python場所にある場合でも、PyDev を設定して、たとえば、、、/usr/bin/python3またはpython26「推測しないでください。常に #! 行またはプロジェクト固有の設定を使用してください」、またはシステム全体ではなく、ユーザーごとの場所にPythonをインストールしたか、誰が何を知っているか。

「Interpreter - Python」設定ページにあるものを参照し、Eclipse が期待する方法で Python を実行できるかどうかを確認してください。そうでない場合、組み込みの基本的なものを除いて、コマンドライン補完を行うことができませんpage。タイプなので、ほぼすべてのクラス オブジェクトが持つすべての標準的なマジック メソッドを推測し、それ以外は何も推測しません。)

于 2012-12-07T01:55:41.150 に答える
0

それらのほとんどは Python の「マジック メソッド」です。

http://www.rafekettler.com/magicmethods.html

これらは、カスタムの動作を与えるために任意のオブジェクトに定義できる特別なメソッドです。ほとんどの Python IDE はそれらを表示しないことを知っていますが、Eclipse は特に役に立ちます。

于 2012-12-07T01:32:04.767 に答える
0

あなたが直面している問題は、Python のような動的言語での基本的な問題です: IDE は、page変数が参照するオブジェクトの型を知る方法がありません。そのためには、どの型urlopen()が返されるかを知る必要があります。そして、それを呼び出さずにそれを知る方法はありません! 呼び出すたびに同じ型が返されるとは限りません。その場合、どのクラスのメソッドを表示する必要がありますか?

IDE はいくつかの推測を行うことができますが、これらの推測が失敗すると、見ているような結果が得られます。すべてがオブジェクトであるため、オブジェクトがあることを認識しているため、 のメソッドが表示されますobject

于 2012-12-07T01:49:13.550 に答える