2017-10-30 12 views
0

私はAPIからの応答をプリントアウトするスクリプトを持っていますが、何も例外を捕まえることはできません。私はこの話題に尋ねられたすべての質問を幸運なしに行ったと思います。canllがurllib2でexeptionsをキャッチ

スクリプトでエラー/例外が検出されるかどうかを確認するにはどうすればよいですか?

私は知っているサイトでスクリプトをテストしています403禁止されていますが、表示されません。

マイスクリプト:

import urllib2 

url_se = 'http://www.example.com' 

opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'API to File')] 

try: 
    request = opener.open(url_se) 
except urllib2.HTTPError, e: 
    print e.code 
except urllib2.URLError, e: 
    print e.args 
except Exception: 
    import traceback 
    print 'Generic exception ' + traceback.format_exc() 

response = request.read()        
print response 

は、これは正しいアプローチですか? exeptionsに関するベストプラクティスは何ですか?

urllib2 

答えて

0

プログラムにバグがあります。 tryブロックで例外が発生した場合、変数requestは、undefinedresponse = request.text()ブロックになります。
正しいそれそれ、あなたのマシン上でテスト

import urllib2 

url_se = 'http://www.example.com' 

opener = urllib2.build_opener() 
opener.addheaders = [('User-agent', 'API to File')] 

try: 
    request = opener.open(url_se) 
    response = request.read()        
    print response 
except urllib2.HTTPError, e: 
    print e.code 
except urllib2.URLError, e: 
    print e.args 
except Exception as e: 
    import traceback 
    print 'Generic exception ' + traceback.format_exc() 

として、あなたは確かに例外が表示されます。 例外をキャッチすることは、例外をログに記録したい場合にユニバーサル exceptブロックがそのジョブを実行する場合に、別の方法で指定している場合にのみ意味を持ちます。

+0

Hm。何らかの理由で、私がテストしているサイトでは、スクリプト内に多くの情報が表示されていますが、ブラウザでは禁止されています。とにかく、2番目の質問は、これは正しいアプローチ/良い練習ですか?私はより多くの例外を捕まえるべきですか? –

+1

@TheDude例外をキャッチする主な理由は、好ましくない状況がコードを壊すのを止めることです。これは従うのが良い習慣ですが、それらの例外に関して特定のことをしていないので、個々の例外を個々にキャッチするのは意味がありません。 –