python基础(10):异常处理

一.异常情况

异常处理类型
IndentationError缩进错误
NameError未声明,未初始化对象错误
ImportError导入模块/对象错误
ZeroDivisionError除数为0引发的错误

SyntaxError

语法错误
TypeError类型不合适引发的错误
ValueError传入无效参数
IndexError索引超出序列范围
AttributeError访问未知对象属性引发的错误

 举个栗子:(下文代码有误)

#缩进错误
x = int(input(''))
if x>6:
print('Right')#正常在此应该有缩进
else:
    print('Wrong')

 运行结果:

我们知道在python中有严格对代码的要求,所以当缩进错误时,代码可能无法执行或者进行错误的执行(与我们所想达到的执行情况不一样)。 当我们缩进正常时,可正常执行。

再举个栗子:(以下代码有误):

#语法错误
x = int(input(''))
while x<6  #此处有错误
    x+=1
    print(x)

运行结果:

当我们在x<6后面加一个:后,代码可以正常运行。

当我们刚开始写代码时,不可避免会犯一些错误,我们需要认识一些常见的代码错误。

当我们写一个程序时,如果要投入使用,肯定要保证代码在用户使用过程中不会出错,也就是当代码出现异常时程序能够处理。 

二.try...except 语句

 语法格式:

try:

        语句块1(可能出现异常的语句)

except  异常类型:

        语句块2(处理异常的语句)

#try...except 语句
try:
    num1 = float(input("请输入被除数:"))
    num2 = float(input("请输入除数:"))
    result = num1 / num2
    print(f'计算的结果是{result:.2f}')
except ZeroDivisionError:
    print("除数不能为0")

运行结果:

 

如上,假如我们做一个计算的程序,如果用户输入了0作除数,我们的代码便报错然后无法执行后面的程序,则会影响用户后续的体验。我们通过对比上面两张图片的结果,可以得到当我们使用 try...except 语句时,报错可以得到有效处理使得后面程序可以正常运行。

try语句的执行过程:

首先执行try语句下的内容,如果没有异常发生,则忽略except语句,执行后面的语句(即执行完try语句后结束)。如果出现了和except中的异常名称一样的异常,那么对应的except语句将会执行。如果出现了的异常不是except语句中的异常,那么try语句后面的内容将不执行。

try:
    result = int(input('请输入一个数:'))
    print(result+1)
except ValueError:
    print("传入无效参数")
except TypeError:
    print("类型不合适引发的错误")
except:
    print("是一个未知的错误被触发了")

 运行结果:

在这个例子中,我们可以看到,当我们输入的是1时,try不会报任何错误,因此程序执行完try中的子句后不会再执行except语句。当我们输入hh时,hh并不能被int()变成数字,所以触发了except中的ValueError语句。由于没有找到合适的代码,当我们把result = int(input('请输入一个数:'))这个代码中的int()去掉时,即使输入数字2,也依旧会报错,这时爆出的错是TypeError,此时输入的2是字符串类型,但print(result+1)语句中1是整数类型。

一个try语句中可能包含多个except语句,分别用来处理不同的异常,但最多只有一个异常分支会被执行。

三.try...except...else语句

 语法格式:

try:

        语句块1

except  (异常类型):

        语句块2

else:

        语句块3

如果语句块1不能正常运行,则执行语句块2;如果语句块1能正常运行,则执行语句块3.

else语句将在try语句没有任何异常时执行,如果使用else语句,必须放在所有except语句块之后。

try:
    num1 = float(input("请输入被除数:"))
    num2 = float(input("请输入除数:"))
    result = num1 / num2
    print(f'计算的结果是{result:.2f}')
except ZeroDivisionError:
    print("除数不能为0")
else:
    print('程序没有任何异常')

 运行结果:

在这两张运行结果的图片中,我们可以看到,我们先使用num1,num2输入两个浮点数,然后把num1 / num2的结果赋值给result并限制小数点为两位进行打印。当除数为0时,执行了except语句且未执行else语句。当除数不为0时,没有执行except语句,执行了else语句。

四.try...except...finally...语句

语法格式:

try:

        语句块1

except  (异常类型):

        语句块2

finally:

        语句块3

无论try下的语句是否异常,finally下的语句块3都会执行。

try:
    num1 = float(input("请输入被除数:"))
    num2 = float(input("请输入除数:"))
    result = num1 / num2
    print(f'计算的结果是{result:.2f}')
except ZeroDivisionError:
    print("除数不能为0")
else:
    print('程序没有任何异常')
finally:
    print("程序执行完毕")

 运行结果:

如上图运行结果,我们可以看出finally语句是一定会被执行的。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值