DW学习-Python基础03(异常处理)

1 异常与错误

  • 错误:指的是代码有语法问题,无法解释运行,必须改正过后才能运行。
  • 异常:代码语法没有问题,但是运行时会出现错误,这种在运行期间检测到的错误被称为异常。Python支持coder自己检测处理异常。

2 try-except语句

2.1 语法1(异常的基础写法,不推荐)

try:
	可能发生异常的代码
except:
	如果出现异常执行的代码

注意:使用except而不带任何异常类型,这不是一个很好的方式,我们不能通过该程序识别出具体的异常信息,因为它捕获所有的异常。

2.2 语法2(返回异常的原因,捕获指定异常)

try:
	可能发生异常的代码
except 异常类型1(Exception) as 变量名:	# Exception是任何异常类型
	出现异常1后执行的代码
except 异常类型2(Exception) as 变量名:	# Exception是任何异常类型
	出现异常2后执行的代码
......

注意:使用多个except代码块时,必须坚持对其规范排序,要从最具针对性的异常到最通用的异常。

  • 工作流程:
    • 首先,执行try子句,即可能出现异常的代码
    • 如果try子句没有异常,则不执行except子句,try子句执行完后结束。
    • 如果try子句执行过程中出现异常,try子句剩下的部分被忽略。如果异常的类型和except后的异常类型相同,则对应的except子句被执行,其他的except子句则被忽略。
    • 如果没有一个异常和任何except子句匹配,则异常传递给上层的try中。

【例子】

try:
    a = int(input('请输入除数(分母):'))
    b = int(input('请输入被除数(分子):'))
    print(b/a)
    print('异常检测出来后,继续执行的代码')
except ZeroDivisionError as error:
    print('执行错误\n原因是:'+str(error))
except ValueError as error:
    print('执行错误\n原因是:'+str(error))
'''
请输入除数(分母):0
请输入被除数(分子):9
执行错误
原因是:division by zero
-------------------------
请输入除数(分母):a
执行错误
原因是:invalid literal for int() with base 10: 'a'
'''

注意:如果try子句执行过程中出现异常,那么try子句后面的代码不会再执行。

2.3 语法3(捕获多个异常)

try:
	可能发生异常的代码
except (异常类型1,异常类型2,...as 变量名:	
	捕获其中一个异常类型后执行的代码

注意:如果不是指定的异常类型还是会报错。

【例子】

try:
    a = int(input('请输入除数(分母):'))
    b = int(input('请输入被除数(分子):'))
    print(b/a)
    print('异常检测出来后,继续执行的代码')
except (ZeroDivisionError,ValueError) as error:
    print('执行错误\n原因是:'+str(error))
'''
请输入除数(分母):a
执行错误
原因是:invalid literal for int() with base 10: 'a'
'''

3 try-except-else语句

  • 语法:else表示当try子句执行没有异常时,将被执行的语句。
try:
    检测范围
except 异常类型 as 变量名:
    出现异常后的处理代码
else:
    如果没有异常执行这块代码

【例子】

try:
    a = int(input('请输入除数(分母):'))
    b = int(input('请输入被除数(分子):'))
    print(b/a)
except (ZeroDivisionError,ValueError) as error:
    print('执行错误\n原因是:'+str(error))
else:
    print('没有异常,正确执行')
'''
请输入除数(分母):2
请输入被除数(分子):4
2.0
没有异常,正确执行
'''

4 try-except-finally语句

  • 语法:finally表示无论try子句是否异常都要执行的代码。
try:
    检测范围
except 异常类型 as 变量名:
    出现异常后的处理代码
finally:
    无论如何都会被执行的代码

【例子】

try:
    a = int(input('请输入除数(分母):'))
    b = int(input('请输入被除数(分子):'))
    print(b/a)
except (ZeroDivisionError,ValueError) as error:
    print('执行错误\n原因是:'+str(error))
else:
    print('没有异常,正确执行')
finally:
    print('无论如何都会执行我')
'''
请输入除数(分母):0
请输入被除数(分子):2
执行错误
原因是:division by zero
无论如何都会执行我
'''

5 自定义异常:raise语句

  • 作用:将不满足程序逻辑的情况,反馈给用户,不是语法的错误。比如输入密码不符合要求,至少不能低于8位,要求大小写等。
  • 【例子1:自己定义/抛出异常并捕获】
try:
    a=102
    if a>100:
        raise Exception('数值大于100')
except Exception as error:
    print(error,type(error))
# 数值大于100 <class 'Exception'>

6 习题

  • Q1:猜数字游戏
    电脑产生一个零到100之间的随机数字,然后让用户来猜,如果用户猜的数字比这个数字大,提示太大,否则提示太小,当用户正好猜中电脑会提示,“恭喜你猜到了这个数是…”。在用户每次猜测之前程序会输出用户是第几次猜测,如果用户输入的根本不是一个数字,程序会告诉用户"输入无效"。
    A1:
import random
true_num=random.randint(0,100)
print('猜测一个0-100之间的整数')
try:
    for i in range(1,101):
        print(f'第{i}次猜,',end='')
        user_num=int(input('请输入一个整型数字:'))
        if user_num > true_num:
            print('太大')
        if user_num < true_num:
            print('太小')
        if user_num == true_num:
            print(f'恭喜你猜到了这个数是{true_num}')
except ValueError:
    print('输入无效')
'''
猜测一个0-100之间的整数
第1次猜,请输入一个整型数字:50
恭喜你猜到了这个数是50
--------------------------------
猜测一个0-100之间的整数
第1次猜,请输入一个整型数字:a
输入无效
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值