python异常

一、异常简介

  Python最强大的结构之一就是它的异常处理能力,所有的标准异常都使用类来实现,都是基类Exception的成员,都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中,所以程序不必导入exceptions模块即可使用异常。一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。  
       异常的处理过程、如何引发或抛出异常及如何构建自己的异常类都是需要深入理解的。

二、详细介绍

1、什么是异常

简单来说,就是程序在执行过程中发生错误。

不管是通过Python解释器执行还是标准的脚本执行,所有的错误都符合相似的格式, 这提供了一个一致的错误接口。所有错误,无论是语意上的还是逻辑上的,都是由于和Python解释器不相容导致的,其后果就是引发异常。

程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常

2、抛出异常

程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常

如果不抛异常,当发生错误时,整个程序可能全部终止。抛异常可以实现让当次执行的程序中断 

报出的异常类型珂参考https://blog.csdn.net/niedongri/article/details/79309136

三、捕获异常

1、简单捕获异常

在程序开发中,如果 对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来 捕获异常

捕获异常最简单的语法格式:

try:

    尝试执行的代码

except:

    出现错误的处理

简单练习:要求用户输入数字,否则报错

try:
    num = int(input('请输入一个数字:'))
    print('输入正确')
except:
    print('请输入数字')

运行结果:

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe E:/Project/爬虫阶段/day-04-26/test.py
请输入一个数字:e
请输入数字

2、抛出异常完整语法:

try—finally的方式是finally单独和try连用。这个try-finally语句和try-except区别在于它不是用来捕捉异常的。作为替代,它常常用来维持一致的行为,无论 try中是否有异常触发,finally 代码段都会被执行。

else:只有在没有异常时才会执行

try:
    # 尝试执行的代码
    pass
except 错误类型1:
    # 针对错误类型1,对应的代码处理
    pass
except 错误类型2:
    # 针对错误类型2,对应的代码处理
    pass
except (错误类型3, 错误类型4):
    # 针对错误类型3 和 4,对应的代码处理
    pass
except Exception as result:
    # 打印错误信息
    print(result)
else:
    # 没有异常才会执行的代码
    pass
finally:
    # 无论是否有异常,都会执行的代码
    print("无论是否有异常,都会执行的代码")

例如:

try:
    num = int(input('请输入一个数字:'))
    print('输入正确')
except:
    print('请输入数字')

else:
    print('没有异常执行顺利')

finally:
    print('程序执行完毕')



有异常的运行结果:

C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe E:/Project/爬虫阶段/day-04-26/test.py
请输入一个数字:1
输入正确
没有异常执行顺利
程序执行完毕

无异常的运行结果:

请输入一个数字:ert
请输入数字
程序执行完毕

3、自定义或主动抛出异常

在开发中,除了 代码执行出错 Python 解释器会 抛出 异常之外

还可以根据 应用程序 特有的业务需求 主动抛出异常

基本语法;
主动抛出异常终止程序 
raise 异常名称(‘异常描述’)

try:
    raise IndexError('索引越界')
except IndexError as e :
    print(e)

执行结果:


索引越界

4.异常的好处

(1)保证程序的健壮性     代码经得起各种情况的摧残

(2)对于有问题的数据进行收集,做好留痕工作

5.爬虫过程中经常出现的异常

requests中存在的异常在:requests.exceptions

(1)requests.exceptions.ConnectionError   未知服务器

(2)requests.exceptions.ConnectTimeout  连接\读取超时

(3)requests.exceptions.ProxyError  代理服务器异常   代理连接不上

import requests
from requests.exceptions import ConnectionError
url_list=[
    'htttp://www.langlang2017.com',
    'http://www.xxx.com/000000000.html',
    'http://www.baidu.com',
]
for url in url_list:
    try:
        response=requests.get(url)
        print('--------:',url)
    except ConnectionError as e:
        print(url,'有问题')
        print('ConnectionError:\n',e)
    except Exception as e:
        print(e)

运行结果:

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值