python中的异常处理

异常处理

一、错误与异常

1、错误:
语法错误(大小写拼写错误、括号不匹配等…)=> 不能正常执行
逻辑错误(程序运行正常,只是最后结果不符合预期)
2、异常:
程序运行过程中,出现的意料之外的错误
如:打开的文件不存在、被除数为0、操作的数据类型不对、存储错误,互联网请求错 误…

二、常见的异常类

1、NameError–》变量名异常:尝试访问一个没有申明的变量
2、ZeroDivisionError–》除数为0的异常
3、SyntaxError–》语法错误
4、IndexError–》索引异常:索引超出序列范围
5、KeyError–》关键字异常:请求一个不存在的字典关键字

a = {'a':1}
print(a['b']) --> a.get('b')没有找到不会抛出异常

6、IOError–》读写异常:例如:读取的文件不存在
7、AttributeError–》属性异常:尝试访问未知的对象属性
8、ValueError–》类型异常:传给函数的参数类型不正确,例如:给int()函数里面传入了字符串
9、AssertionError–》断言异常,常用在测试,例如函数的执行结果不符合预测的结果

三、异常处理

1、异常机制:try…except
异常发生,不终止程序
异常发生,做特殊处理
2、捕获异常,如果捕获到了异常就处理except里的内容
正常执行: try -> 执行代码 -> 结束
遇到异常: try -> 遇到异常 -> 跳到excep -> 结束

try:
    print('打开文件aa')
    fp = open('aa')
except:
    print('文件未找到')
print('end.....')

3、except可以有多个分支,匹配到第一个异常就会退出
except捕获的错误与触发的错误不一致,程序就捕获不到,异常就会照常抛出

4、父异常与子异常:父类异常放在前面,会吞噬所有的子类异常
例如:
老师(父类)–》高中老师,初中老师,培训老师–》文老师
Exception --》 FileNotFoundError --》 open(‘aa’)
因此一般我们会把父异常放到最后面

try:
    print('打开文件aa')
    fp = open('aa')
    # print(1/0)
except ZeroDivisionError as ze:
    print("除数为0")
except FileNotFoundError as fe:
    print("文件未找到")
except Exception as e:
    print(f'exception:{e}')
print('end.....')

5、else结构:没有任何异常发生的时候执行的

try:
    print('else....')
    print(1/0)
except:
    print('error')
else:
    print('else end')

6、finally结构:不管有没有异常,不管异常有没有被捕获都执行

try:
    print('finally....')
    # print(1/0)
except ZeroDivisionError:
    print('error')
else:
    print('else end')
finally:
    print('finally test end.....')

finally子句很强大,即使有函数的return语句也要执行finally

def finally_func():
    try:
        print('try..test')
        return 'abc'
    except :
        print('error')
    finally:
        print('finally test end.....')

result = finally_func()
print(result)

7、手动触发异常
raise – 默认就抛出RuntimeError
raise 异常类 --》raise IndexError
raise 异常类(‘异常信息’) --》raise IndexError(‘index error’)

try:
    scout = int (input("请输入学生的成绩,范围是0-100:"))
    if scout<0 or scout>100:
        raise IndexError('你输入的范围有误')
    else:
        print(f'这个学生的成绩是{scout}')
except ValueError as va:
    print('你输入的不是整型')
except IndexError as fe:
    print('你输入的范围有误')

8、局域网存活IP检测

#!/usr/bin/python3
import subprocess
import IPy
subprocess.call('>down.txt',shell=True)
subprocess.call('>up.txt',shell=True)
ip = IPy.IP('192.168.243.0/24')
# 循环得到192.168.243.0/24网段的IP清单,然后一个ip发一个ping包,查看返回值是否ping通
for x in ip:  
  rc = subprocess.call(
    'ping  %s -c 1 &> /dev/null' %x,
    shell=True
  )  
  # 定义ping命令的变量,返回值0:正常,返回值1:ping不通
  if rc:
  	# 没ping通的ip写入down.txt
      subprocess.call('echo %s 没有被使用 >>down.txt' %x,shell=True)
  else:
  	# ping通的ip写入up.txt
    subprocess.call('echo %s 已经被使用 >>up.txt' %x,shell=True)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值