2010-08-12 39 views
28

Tôi muốn lấy các mã trạng thái HTTP khi nó đặt ra một ngoại lệ URLError:Python urllib2 URLĐịnh dạng mã trạng thái HTTP.

tôi đã cố gắng này, nhưng không giúp:

except URLError, e: 
    logger.warning('It seems like the server is down. Code:' + str(e.code)) 
+1

Lạ. Bạn có thể dán mã bạn sử dụng để mở url không? Đối tượng 'URLError' –

Trả lời

59

Bạn không nên kiểm tra cho một mã trạng thái sau khi bắt URLError, kể từ khi ngoại lệ có thể được huy động trong trường hợp không có mã trạng thái HTTP có sẵn, ví dụ như khi bạn' tái nhận kết nối bị từ chối lỗi.

Sử dụng HTTPError để kiểm tra các lỗi cụ thể HTTP, và sau đó sử dụng URLError để kiểm tra các vấn đề khác:

try: 
    urllib2.urlopen(url) 
except urllib2.HTTPError, e: 
    print e.code 
except urllib2.URLError, e: 
    print e.args 

Tất nhiên, có thể bạn sẽ muốn làm một cái gì đó nhiều hơn thông minh hơn là chỉ in các mã lỗi, nhưng bạn hiểu ý rồi đấy.

+2

Để an toàn 100%, bạn cũng có thể muốn kiểm tra ValueError là urllib2.urlopen sẽ ném ngoại lệ ValueError khi url được nhập không hợp lệ hoặc trống. – zer0c00l

1

Không chắc lý do tại sao bạn đang nhận được lỗi này. Nếu bạn đang sử dụng urllib2 này sẽ giúp:

import urllib2 
from urllib2 import URLError 

try: 
    urllib2.urlopen(url) 
except URLError, e: 
    print e.code 
+2

không có thuộc tính 'mã'. Tốt hơn là nên sử dụng e.reason. – joctee

Các vấn đề liên quan