2009-11-13 63 views

回答

152

的引用代码()方法(由在python2.6的)返回与该响应发送的HTTP状态代码或无。

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

注意,引用代码()在Python 2.6中的溶液。 – Mark 2009-11-13 00:52:47

+1

@Mark,好点 – 2009-11-13 00:54:37

+2

在2.6以前的版本中,a.code可以工作。 – user183037 2013-05-07 23:43:02

80

您可以使用urllib2还有:

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() 

注意HTTPError是存储HTTP状态代码的URLError一个子类。

+0

第二个“else”是一个错误吗? – 2013-08-25 19:27:11

+4

Nope:http://stackoverflow.com/questions/855759/python-try-else – 2013-08-26 16:50:11

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感兴趣的是抓取http请求代码(200,404,500等),而不是urllib2引发的一般性错误。 – 2012-07-09 15:34:52

14

对于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

对于[URLError](https://docs.python.org/3.5/library/urllib.error.html)'print(e.reason)'可以使用。 – Liliane 2017-08-04 20:23:27

相关问题