一、DebugLog
有时我们希望边运行程序边打印调试日志,此时就需要开启DebugLog。
开启步骤:
1、分别使用 urllib. request Httphandler(和 urllib. request. Httpshandlero将 debuglevel设置为1
2、使用 urllib request build opener0创建自定义的 opener对象,并使用1)中设置的值作为参数。
3、用 urllib request install opener0创建全局默认的 opener对象,这样,在使用urlopeno时,也会使用我们安装的 opener对象。
4、进行后续相应的操作,比如 urlopeno等。此时,根据以上思路,我们可以通过如下代码开启 Debug Log:
import urllib.request
httphd = urllib.request.HTTPHandler(debuglevel=1)
httpshd = urllib.request.HTTPSHandler(debuglevel=1)
opener = urllib.request.build_opener(httphd, httpshd)
urllib.request.install_opener(opener) # 创建全局默认的opener对象
data = urllib.request.urlopen("http://www.51cto.com")
二、异常处理神器——URLError实战
(1)URLError
import urllib.request
import urllib.error
""" URLError原因: 1.连接不上服务器 2.远程URL不存在 3.无网络 4.触发了HTTPError """
try:
data = urllib.request.urlopen("http://www.baidusadoasd.com")
print(data.read())
except urllib.error.URLError as e:
print(e.reason)
(2) HTTPError
HTTPError为URLError的子类,这种方法只能处理以上四中情况中的第四种情况
try:
data = urllib.request.urlopen("http://www.baidusadoasd.com")
print(data.encode)
except urllib.error.HTTPError as e:
print(e.code)
print(e.reason)
(3)实际运用中优化代码
try:
data = urllib.request.urlopen("http://www.baidusadoasd.com")
print(data.read())
except urllib.error.HTTPError as e: # 先让子类HTTPError进行处理
print(e.code)
print(e.reason)
except urllib.error.URLError as e: # 若子类无法进行处理,再让URLError进行处理
print(e.reason)
(4)代码优化(简化代码)
try:
data = urllib.request.urlopen("http://www.baidusadoasd.com")
print(data.read())
except urllib.error.URLError as e:
if hasattr(e,"code"): # 使用hasattr函数判断是否有这些属性
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
(5)异常码
200 OK
一切正常
300 Moved Permanently
重定向到新的URL,永久性
302 Found
重定向到临时的URL,非永久性
304 Not Modified
请求的资源未更新
400 Bad Request
非法请求
401 Unauthorized
请求未经授权
403 Forbidden
禁止访问
404 Not Found
没有找到对应的页面
500 Internal Server Error
服务器内部出现错误
501 Not Implemented
服务器不支持实现请求所需的功能