2017-03-12 3 views
1

私はいくつかの方法を試してみましたが、誰も私の問題を解決しませんでした。ここに私のコードは次のとおりです。2つのエラー処理がある場合、属性を呼び出す方法は?

for i in links.readlines(): 
try: 
    link = urlopen(i) 
except (HTTPError, URLError) as e: 
    print(e.code) 
else: 
    <Code Goes Here> 

エラーマッサージ:

AttributeError: 'URLError' object has no attribute 'code' 

私はできない、私は1つの例外の取扱い2つのエラーを作成する必要がありますが、問題は、私はHTTPError属性を呼び出すことはできません最初の例外処理を少なくとも呼び出します。

答えて

1

例外を除いて、複数の例外を処理することができます。

for i in links.readlines(): 
try: 
    link = urlopen(i) 
except HTTPError as e: 
    print(e.code) 
except URLError as e: 
    <do other handling here> 
else: 
    <Code Goes Here> 

例外処理の詳細については、this linkを参照してください。

+0

ありがとうございます。私はすべての例外を同じにする必要があります。したがって、HTTPErrorコード405とURLError SSL Verify Failedの場合、コードは小さくなります。 2つの例外を除いてURLErrorにSSL Verifyを追加する必要があります。 – rafidkarim

0

HTTPErrorURLErrorのサブクラスです。インスタンス変数codeは、HTTPErrorで利用可能であり、基底クラスURLErrorでは利用できません。したがって、同じexceptブロックで2つのエラーを処理しようとしているときに、URLErrorが発生すると、インスタンス変数codeが見つかりません。

URLErrorには、エラーの理由を取得する場合はreasonというインスタンス変数があります。

実際には、両方のエラータイプに対して変数reasonが使用可能である必要があります。 e.code印刷e.reasonの代わりに、独自のバージョンのコードを使用してこれを実現できます。

for i in links.readlines(): 
    try: 
     link = urlopen(i) 
    except (HTTPError, URLError) as e: 
     print(e.reason) 
    else: 
     <Code Goes Here> 
関連する問題