2009-11-13 16 views

Répondre

152

La méthode getCode() (Ajouté à python2.6) renvoie le code d'état HTTP qui a été envoyé avec la réponse, ou None si l'URL est pas URL HTTP.

>>> a=urllib.urlopen('http://www.google.com/asdfsf') 
>>> a.getcode() 
404 
>>> a=urllib.urlopen('http://www.google.com/') 
>>> a.getcode() 
200 
+14

Notez que getCode() a été ajouté en Python 2.6. – Mark

+1

@Mark, bon point –

+2

Dans certaines versions pré-2.6, un.code fonctionne. – user183037

80

Vous pouvez utiliser urllib2 ainsi:

import urllib2 

req = urllib2.Request('http://www.python.org/fish.html') 
try: 
    resp = urllib2.urlopen(req) 
except urllib2.HTTPError as e: 
    if e.code == 404: 
     # do something... 
    else: 
     # ... 
except urllib2.URLError as e: 
    # Not an HTTP-specific error (e.g. connection refused) 
    # ... 
else: 
    # 200 
    body = resp.read() 

Notez que HTTPError est une sous-classe de URLError qui stocke le code d'état HTTP.

+0

Le deuxième 'else' est-il une erreur? –

+4

Non: http://stackoverflow.com/questions/855759/python-try-else –

6
import urllib2 

try: 
    fileHandle = urllib2.urlopen('http://www.python.org/fish.html') 
    data = fileHandle.read() 
    fileHandle.close() 
except urllib2.URLError, e: 
    print 'you got an error with the code', e 
+5

TIMEX est intéressé à saisir le code de requête HTTP (200, 404, 500, etc.) pas une erreur générique lancée par urllib2. –

14

Pour Python 3:

import urllib.request, urllib.error 

url = 'http://www.google.com/asdfsf' 
try: 
    conn = urllib.request.urlopen(url) 
except urllib.error.HTTPError as e: 
    # Return code error (e.g. 404, 501, ...) 
    # ... 
    print('HTTPError: {}'.format(e.code)) 
except urllib.error.URLError as e: 
    # Not an HTTP-specific error (e.g. connection refused) 
    # ... 
    print('URLError: {}'.format(e.reason)) 
else: 
    # 200 
    # ... 
    print('good') 
+0

Pour [URLError] (https://docs.python.org/3.5/library/urllib.error.html) 'print (e.reason)' peut être utilisé. – Liliane