2017-03-29 2 views
0

マイコード:問題追跡システムからxmlファイルを1つずつダウンロードしたいのですが、ファイルが存在しないときにエラーメッセージが表示されます。どうすればファイルが存在しないのですか?

import urllib.request 
for i in range(0,1000): 
    issue_id1='DERBY-'+str(i) 
    url ="https://issues.apache.org/jira/si/jira.issueviews:issue-xml/"+issue_id1+'/'+issue_id1+'.xml' 
    s=urllib.request.urlopen(url) 
    contents = s.read() 
    file = open(issue_id1+'.xml', 'wb') 
    file.write(contents) 

file.close() 

スタックトラック:問題は、ループの最初の反復で発生

Traceback (most recent call last): 
    File "/PhP/Learning/xmldownlaod.py", line 10, in <module> 
    s=urllib.request.urlopen(url) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 161, in urlopen 
    return opener.open(url, data, timeout) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 469, in open 
    response = meth(req, response) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 579, in http_response 
    'http', request, response, code, msg, hdrs) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 507, in error 
    return self._call_chain(*args) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 441, in _call_chain 
    result = func(*args) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/urllib/request.py", line 587, in http_error_default 
    raise HTTPError(req.full_url, code, msg, hdrs, fp) 
urllib.error.HTTPError: HTTP Error 404: Not Found 
+0

をエラー処理のための"try except"ブロックを使用しています。だから、私はすべての可能なファイル名を生成し、次にダウンロードして保存しようとしています。ファイルが見つからない場合はエラーを生成します。しかし、存在するすべてのファイルをダウンロードし、存在しない場合はスキップする必要があります。誰かができるなら私を助けてください。 –

答えて

1

Pythonは私がすべてのXMLファイル名をしません

import urllib.request 
from urllib.error import URLError # the docs say this is the base error you need to catch 
for i in range(0,1000): 
    issue_id1='DERBY-'+str(i) 
    url ="https://issues.apache.org/jira/si/jira.issueviews:issue-xml/"+issue_id1+'/'+issue_id1+'.xml' 
    try: 
     s=urllib.request.urlopen(url) 
     contents = s.read() 
    except URLError: 
     print('an error occurred while fetching: "{}"'.format(url)) 
     continue # skip this url and proceed to the next 
    file = open(issue_id1+'.xml', 'wb') 
    file.write(contents) 
+0

私はあなたに答えていただきありがとうございます。どうもありがとう。しかし、まだ問題があります。 DERBY-16.xmlが存在しないことがわかりました。ループが16に達すると、再びエラーが生成され、同じスタックトレースが検出されます。 –

+0

DERBY-16.xmlはサーバー上に存在しませんが、上記のスクリプトはそれをスキップしてリセットを続けます。 'file.write'の後に' print( '{}}'形式(url)) 'を入れて、どのファイルが成功しているかを確認することができます。 –

+0

あなたの説明をありがとう。私はここでなぜ続行しないで(例外をスキップするために)動作しません。 –

1

、URL値は次のようになります。

https://issues.apache.org/jira/si/jira.issueviews:issue-xml/DERBY-0/DERBY-0.xml 

「死んでいます「リンクが見つかりません」というエラーが表示されます。

1であなたのループを開始し

for i in range(1, 1000): 
+0

あなたの答えをありがとう。問題は、範囲内でファイルが欠落していることです。ファイルが見つからない場合、エラーメッセージを生成し、プログラムを終了します。どうすれば例外を処理できますか?手伝っていただけませんか? –

+0

@RejulKarimああ、それはまさにピーターの答えについてです。見てみな。ありがとう。 – alecxe

関連する問題