2

私は初心者のPythonプロラマーです。2.7.2、Windows 7、組み込みのインタープリター、および3つのライブラリ。私はこれを行おうとしていますが、エラーが発生します。私は何か助けに感謝しますか?

import os
import urllib
import socket

DISNEY_URL = 'http://www.sec.gov/Archives/edgar/data/1001039/000119312511321340/dis-20111001.xml'
#Neither of these seem to work when opening with urllib.urlopen becaue of the error:
#I/O error(socket error): [Errno 11004] getaddrinfo failed

DISNEY_LOCAL = 'file://C:/Users/Nate/Desktop/Education/python_education/xbrlnexusfiles/xbrlfiles/dis-20111001.xml'
DISNEY_LOCAL_NONE = 'file://C:/Users/Nate/Desktop/Education/python_education/xbrlnexusfiles/xbrlfiles/dis.txt'


class SECFilingPackage(object):

    def __init__ (self, SEC_URL):
        URLFilePath, URLFileExt = os.path.splitext(SEC_URL)
        try:
            urllib.urlopen(SEC_URL)
        except IOError as (errno, strerror):
            print "I/O error({0}): {1}".format(errno, strerror)
            #This error throws, see it copied above;

DisneyPackage = SECFilingPackage(DISNEY_LOCAL_NONE)

このエラーが発生します:I / Oエラー(ソケットエラー):

[Errno11004]getaddrinfoが失敗しました

はい、テキストファイルはその場所にあります。テキストファイルの内容は「Nothing」です。

スタックトレースによると、最後の呼び出しは次の行516でしたopen_ftp C:/Python27/Lib/urllib.py

host = socket.gethostbyname(host)
IOError: [Errno socket error] [Errno 11004] getaddrinfo failed

URLをうまく開くことができたので、プロキシ/ファイアウォールの問題ではないと思います(また、それを本当に理解していません)

そして、私は改行またはENDがそれと何の関係があるのか​​理解していません。

私はそれがurllib参照のために働くはずだと信じています:

URLにスキーム識別子がない場合、またはファイルがある場合:スキーム識別子として、ローカルファイルが開きます(ユニバーサルニューラインなし)。それ以外の場合は、ネットワーク上のどこかにあるサーバーへのソケットを開きます。

(これは、ユニバーサルニューラインがすでにそこで変換されていることを期待している人ががっかりすることを意味していると思います。

文字列の前に付けないと、「スキーム識別子がない場合」についても異議を唱えることに注意してくださいfile://

IOError:[Errno url error]不明なURLタイプ:'c')

urllib.pyいわば「釣りを学ぶ」ことを望んでいますが、少なくともこれらの値を理解するためにデバッグできる方法があると誰かに教えてもらえますか?Eclipseでそれを行うことはできますか?それはいつも私をプロジェクトに追い込むようです。

4

1 に答える 1

2

の代わりにfile://<filename>、を使用しますfile:///<filename(余分なスラッシュに注意してください)。

urllib.urlopenまた、廃止されたことに注意してくださいurllib2.urlopen。代わりに使用する必要があります。

于 2012-01-29T17:28:00.873 に答える