2023-09-03
Python
00

目录

Bug的由来级分类
不同异常类型的处理方式
粗心导致的语法错误自查方法
知识不熟练导致的错误
思路不清晰导致的错误
被动掉坑导致的错误
异常处理机制
Pycharm的调试模式

Bug的由来级分类

Bug一词的原意是“昆虫”或“虫子”;而在电脑系统或程序中隐藏着的一些未被发现的缺陷或问题,人们也叫它“bug”。

不同异常类型的处理方式

粗心导致的语法错误自查方法

  • 漏掉了末尾的冒号,如if语句,循环语句,else子句等
  • 缩进错误,该缩进的没缩进,不该缩进的缩进了
  • 把英文符号写成中文符号,比如: 引号 , 冒号, 括号
  • 字符串拼接的时候,把字符串和数字拼在一起
  • 没有定义变量,比如while的循环条件的变量
  • "=="比较运算符和"="赋值运算符用错了
python
age=input('请输入你的年龄') print(type(age)) # if age >= 18 # 默认"input()"输入的类型都是str类型,需要转换int类型比较,还有结尾忘记写“:"了。 if int(age) >= 18: print('你已经是成年人了') i=0 while i < 10: print(i) i+=1 # 如果忘记改变i的变量,i就会一直是0,会陷入死循环

知识不熟练导致的错误

知识不熟练导致的错误,就需要多加练习了

python
lst=[11,22,33,44] # print(lst[4]) # 索引超出范围,列表的索引从0开始的,想输出第4个元素,索引应该填写3 print(lst[3]) lst=[] # lst=append('A','B','C') # append()方法掌握不熟练,append一次只能添加一个元素,是lst的方法,不应该使用赋值运算符 lst.append('A') lst.append('B') lst.append('C') print(lst)

思路不清晰导致的错误

思路不清晰导致的错误可以使用print()函数打印输出,使用#暂时注释掉部分代码。

题目要求:使用列表存储电影信息,要求输入名字显示xxx出演了哪部电影。

python
lst=[{'rating':[9.7,2062397],'id':'1292052','type':['犯罪','剧情'],'title':'肖申克的救赎','actors':['蒂姆·罗宾斯','摩根·费里曼']}, {'rating':[9.6,1528760],'id':'1291546','type':['剧情','爱情','同性'],'title':'霸王别姬','actors':['张国荣','张丰毅','冯巩','葛优']}, {'rating':[9.5,155919],'id':'1292720','type':['爱情','剧情'],'title':'阿甘正传','actors':['汤姆·汉克斯','罗宾·怀特']} ] '''思路不清晰的错误示例 name=input('请输入你要查询的演员名字:') for item in lst: # 遍历列表 for movie in item: print(movie) actors=movie['actors'] if name in actors: print(name+'出演了'+actors)''' # 正确的思路代码 name=input('请输入你要查询的演员名字:') for item in lst: act_lst=item['actors'] if name in act_lst: print(name+'出演了'+item['title'])

被动掉坑导致的错误

程序代码逻辑没有错,因为用户错误操作或一些”例外情况“而导致的程序崩溃。

题目要求:输入2个整数并运行除法运算

python
a=int(input('请输入第一个整数')) b=int(input('请输入第二个整数')) result=a/b print('结果为',result) 请输入第一个整数20 请输入第二个整数0 # 0是不能作为除数的,所以会报错 Traceback (most recent call last): File "D:\work\code\python\main.py", line 3, in <module> result=a/b ZeroDivisionError: division by zero

异常处理机制

python提供了异常处理机制,可以在异常出现时即使捕获,让程序继续运行。

python
try: a=int(input('请输入第一个整数')) b=int(input('请输入第二个整数')) result=a/b print('结果为',result) except ZeroDivisionError: # 如果是ZeroDivisionError错误,会执行下面的代码 print('对不起,除数不允许为0') except ValueError: # except的多分枝 print('对不起,只能输入数字串') print('程序结束')

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

python
try: a=int(input('请输入第一个整数')) b=int(input('请输入第二个整数')) result=a/b print('结果为',result) except BaseException as e: # 如果抛出异常执行except块 print('出错了',e) else: # try块中没有抛出异常执行else print('计算结果为',result) finally: # 不论程序有没有抛出异常,都会执行finally print('谢谢您的使用')

python常见的异常类型

序号异常类型描述
1ZeroDivisionError除(或取模)零(所有数据类型)
2IndexError序列中没有此索引(index)
3KeyError映射中没有这个key
4NameError未声明/初始化对象(没有属性)
5SyntaxErrorPython语法错误
6ValueError传入无效的参数
python
# print(10/0) # ZeroDivisionError lst=[11,22,33,44] # print(lst[4]) # IndexError 索引从0开始,超出索引范围 dic={'name':'张三','age':20} # print(dic['gender']) # KeyError key不存在 # print(num) # NameError # int a=20 # SyntaxError # a=int('hello') # ValueError

使用traceback模块打印异常信,可以把打印的异常信息存入到日志文件里。

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

Pycharm的调试模式

断点:程序运行到此处,暂时挂起,停止执行,此时可以详细观察程序的运行情况,方便做出进一步的判断

进入调试视图三种方式

  • 单机工具栏上的这个按钮
  • 右键单击编辑区点击:debug'模块名'
  • 按快捷键: shift+F9

本文作者:柯南

本文链接:

版权声明:©2023 柯南 All rights reserved.