0
点赞
收藏
分享

微信扫一扫

Python的学习(十二):Bug和异常

爱我中华8898 2022-02-23 阅读 47

Python的学习(十二):Bug和异常

常见类型

  • 粗心导致的语法错误SyntaxError

    1. image-20220204214357657

      问题:不能将字符串和整数类型作比较。

      解决方案:将age字符串类型转换成int类型再进行比较。

    2. while i<10:

      ​ print(i)

      问题:没有设置初始值和使用了中文括号还有没有设置循环结束标记。

      解决方案:

      i = 0
      while i < 10:
          print(i)
          i ++
      
  • 知识点不熟练导致的错误

    1. 索引越界

      image-20220204215242710

      索引是从0开始的!

    2. append()方法使用不熟练

      image-20220205135407176

      改成lst.append(‘A’),每次只能添加一个元素。

  • 思路不清晰

    修改后:

     name = input('请输入你想要查询的演员:')
     for item in lst:#遍历列表 item是一个又一个字典
         act_lst = item['actors']
         for actor in act_lst:
             if name in actor:
                 print(name,'出演了',item['title'])
    

异常处理机制

被动掉坑:

程序的代码逻辑没有错误,只是因为用户错误错做或者一些例外情况而导致的程序崩溃

例子:输入两个整数并进行除法运算

a = int(input('请输入第一个整数'))
b = int(input('请输入第二个整数'))
result = a/b
print('结果是:',result)
#1.不小心输入了错误的字符串会导致强制转换整数出错 比如输入q
#2.输入分母为0会导致出错

try—except

解决办法:使用异常处理机制,可以在异常出现的时候进行捕获,然后内部消化,让程序继续运行。

image-20220205182505811

​ 修改后:

  • try:
        a = int(input('请输入第一个整数'))
        b = int(input('请输入第二个整数'))
        result = a/b
        print('结果是:',result)
    except ZeroDivisionError:
        print('对不起,除数不允许为0!')
    print('程序结束')
    
  • 多个except结构

    捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能的异常,可以在最后增加BaseException

    image-20220205183403567

try—except—else

如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块。

try:
    n1 = int(input('请输入第一个整数'))
    n2 = int(input('请输入另一个整数'))
    result = n1/n2
except BaseException as e:
    print('出错了')
    print(e)
else:
    print('结果为:',result)

try—except—else—finally

finally块无论是否发生异常都会被执行,通常用来释放try块中申请的资源

try:
    n1 = int(input('请输入第一个整数'))
    n2 = int(input('请输入另一个整数'))
    result = n1/n2
except BaseException as e:
    print('出错了')
    print(e)
else:
    print('结果为:',result)
finally:
    print('谢谢使用!')
print('程序结束!')

常见的异常类型

  • ZeroDivisionError

    除或(取模)零(所有数据类型)

    print(10/0)
    
  • IndexError

    序列中没有该索引

    lst = [0,1,2]
    print(lst[3])
    
  • KeyError

    映射中没有这个键

    dic = {'name''张三'}
    print(dic['age'])
    
  • NameError

    未声明/初始化对象(没有属性)

    print(num)
    
  • SyntaxError

    Python语法错误

    int a = 20
    
  • ValueError

    传入无效的参数

    a = int('hello')
    

traceback模块的使用

打印异常的信息

import traceback
try:
    print('--------------')
    print(1/0)
except:
    traceback.print_exc()
举报

相关推荐

0 条评论