python异常处理

在python程序运行过程中,遇到错误就会中断程序,但是在实际操作中,我们往往不希望因为这些小小的错误,导致程序无法运作,所以python中引入了异常捕获机制,使程序遇到错误时会提醒我们但是不会中断程序


目录

1.常见异常:

2.异常处理(异常发生时做特殊处理,不终止程序)

3.手动抛出异常

4.我们为什么要手动抛出异常?


1.常见异常:

NameError : 访问一个不存在的变量

print(a)
# NameError: name 'a' is not defined

InentdationError :缩进语法错误

 print("hello")
# IndentationError: unexpected indent

IndexError :索引错误

lst = [1, 2, 3, 4]
print(lst[5])
# IndexError: list index out of range

SyntaxError :python语法错误

print("hello".)
# SyntaxError: invalid syntax

KeyError :键值错误,查找一个没有的键值

d1 = {"name": "yjx"}
print(d1["age"])
# KeyError: 'age'

AttributeError :尝试访问一个对象没有的属性

s1 = {1, 2, 3}
s1.append(3)
print(s1)
# AttributeError: 'set' object has no attribute 'append'

ValueError :传值错误

int("abc")
# ValueError: invalid literal for int() with base 10: 'abc'

AssertionError :断言异常,程序的输出结果和猜测相反

num1 = input("input num1:")
num2 = input("input num2:")
assert num1 > num2
# input num1:1
# input num2:3
#     assert num1>num2
# AssertionError

TypeError : 类型错误

a = 3.1415926
b = "abc"
print(a + b)
# TypeError: unsupported operand type(s) for +: 'float' and 'str'

ZeroDivisionError :除数为0

print(100/0)
# ZeroDivisionError: division by zero

2.异常处理(异常发生时做特殊处理,不终止程序)

try...except... :打开一个不存在的文件,发生了异常,于是执行except输出nosuchfile最后执行print(”end“)语句

try:
    print("strat>>>>>")
    fp = open("yjx.txt")
    print("end....")
except:
    print("nosuchfile")
print("end")

# strat>>>>>
# end....
# end

不指定except类型时,默认抛出exception类,exception是很多常见异常的父类,,同一个try...except...异常捕获机制里可以有多个except类,但是只要捕获到其中一个符合条件就不会再去配对是否符合后面的类型(有点类似于ifelse语句),所以要把父类写在最前面不然后面的子类会失效。

try:
    print("strat>>>>>")
    int("abc")
    print("end....")
except ValueError:
    print("传值错误")
except:
    print("nosuchfile")
print("end")

# strat>>>>>
# 传值错误
# end

我们还可以将异常实例化

try:
    print("strat>>>>>")
    int("abc")
    print("end....")
except ValueError as e:
    print(e)
except:
    print("nosuchfile")
print("end")

# strat>>>>>
# invalid literal for int() with base 10: 'abc'
# end

else、finally语句:执行了except语句就不会执行else语句,但是无论异常是否捕获成功、无论是否执行了except语句,都会执行finally语句

else:

try:
    print("else test>>>")
    int("abc")
except ValueError:
    print("value error")
else:
    print("捕获异常失败")

# else test>>>
# value error

finally:

try:
    print("else test>>>")
    int("abc")
except ValueError:
    print("value error")
finally:
    print("else test end...")

# else test>>>
# value error
# else test end...

3.手动抛出异常

四种方法:raise 关键字、raise、raise 异常类、raise 异常类(说明信息)

print("raise start")
raise IndexError("说明信息")
print("end raise...")

# IndexError: 说明信息

4.我们为什么要手动抛出异常?

错误:错误是语法或是逻辑上的,语法上的错误是指:软件结构的错误导致不能被解释器解释或编译,这种错误会在程序执行前就抛出,逻辑错误是指由不完整或者不合法的输入导致的错误

当python检测到一个错误的时候,解释器就会指出当前已经无法继续执行程序,这个时候就出现了异常

异常:异常就是程序出现错误以后,在正常操作意外产生的行动就叫异常处理

python支持引发和处理异常大大大提高了应用程序的健壮性

通俗的理解就是抛出异常大大大提高了用户体验,程序会捕获这个异常 给用户一个良好的出错提示,同时我们可以在后端改进。

参考:我们为什么需要异常处理、抛出Error_为什么要抛出异常_githubcurry的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值