python异常处理和程序调试:异常处理语句try,except实例详解

2022-07-3111:04:51编程语言入门到精通Comments1,122 views字数 1896阅读模式

了解了异常情况的发生,这一节我们来学习一下异常处理语句,先举个例子,假定甲乙丙丁4辆车分别能承载1吨、2吨、3吨、4吨的货物,当公司接来了任务(货物不可拆分),会首先去考虑甲车能否承载,如果不能承载就交由乙车去装运,如果不能就继续选择车辆,如果最后都没办法处理该货物,那么就终止该程序,我们可以把这个货物看作异常来理解。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

处理异常的语句有多种形式,分别为try...except语句、多except代码块、try...except...else语句和try...except...finally语句、try...excpept...else语句。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

    1. try...except语句文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

这种形式为我们常用的形式,它的语法格式为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
3
4
try:
    block
Except [typeerror ]:
    deal

block为我们的程序执行过程中可能会抛出异常的语句,typeerror为错误类型,如果省略就不指定类型,即捕获全部异常,deal为具体的处理语句。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

我们通过例子来了解一下这个语句,代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
3
4
5
6
7
8
9
10
def test():
  number = int(input('请输入一个数字:'))
  if 15 / number >= 3:
    print('ok')
  else:
    print('wrong')
try:
  test()
except:
  print('分母为0的异常情况')

我们通过几个输入情况来测试结果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
3
4
5
6
7
8
请输入一个数字: 5
ok
请输入一个数字:2
ok
请输入一个数字:dotcpp
分母为0的异常情况
请输入一个数字:0
分母为0的异常情况

我们可以发现我们在except语句中没有指定类型,所以它捕获了所有异常并执行相关语句,因此我们输入了dotcpp也触发了这种异常,因此我们需要对代码进行修改,我们需要把except语句更改为:except ZeroDivisionError,然后我们再次执行,输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
3
4
5
6
7
请输入一个数字:dotcpp
Traceback (most recent call last):
  File "C:/Users/轻烟/PycharmProjects/untitled1/teach/test.py", line 8in <module>
    test()
  File "C:/Users/轻烟/PycharmProjects/untitled1/teach/test.py", line 2in test
    number = int(input('请输入一个数字:'))
ValueError: invalid literal for int() with base 10'dotcpp'

输入0的时候:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
请输入一个数字:0
分母为0的异常情况

通过这两种方式我们来总结一下,如果我们在except语句中不指定类型,那么无论test()中出现任何错误都会执行except语句,如果我们指定了类型的时候,只有指定类型的错误发生的时候才会触发这种异常机制。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

    2. except代码块文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

except代码块就是对于try...except语句的一种扩展,对于一个问题可能会出现多种错误的情况,那么我们可以对每一种情况都做一定的处理,语法格式如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
3
4
5
6
7
8
Try:
    Test()
except [异常类型1]:
    deal
except [异常类型2]:
    deal
except [异常类型3]:
    deal

代码如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
3
4
5
6
7
8
9
10
11
12
def test():
  number = int(input('请输入一个数字:'))
  if 15 / number >= 3:
    print('ok')
  else:
    print('wrong')
try:
  test()
except ZeroDivisionError:
  print('分母为0的异常')
except ValueError:
  print('传入的值异常')

对于这种多except语句的处理机制,我们输入0和dotcpp的时候输出结果为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

1
2
3
4
请输入一个数字:dotcpp
传入的值异常
请输入一个数字:0
分母为0的异常

    3. 总结文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

本节里我们主要学习了基础的ty...except语句的用法,异常类型的选择决定了我们是否所有异常执行except中的语句,所以一定要注意异常类型的选择,下一节我们来学习try...except语句的嵌套和try...except...else语句。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/26252.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/26252.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定