Bug的由来及分类
Bug的常见类型
粗心导致的语法错误 SyntaxError
- 漏了末尾的冒号,如if语句,循环语句,else子句等
- 缩进错误,该缩进的没缩进,不该缩进的缩进了
- 把英文符号写成中文符号,比如说:引号,冒号,括号
- 字符串拼接的时候,把字符串和数字拼在一起
- 没有定义变量,比如说while的循环条件的变量
- “==”比较运算符和“=”赋值运算符的混用
由知识点不熟练导致的错误
索引越界问题 IndexError
lst=[11,22,33,44]
print(lst[4]) #列表中没有索引为4的元素
append()方法的使用掌握不熟练
lst=[]
lst=append('A','B','C') #lst.append(A) append方法每次只能添加一个数据
print(lst)
由于思路不清晰导致的错误
- 使用print()函数
- 使用"#"暂时注释部分代码
Python的异常处理机制
由于被动掉坑所导致的错误
被动掉坑:程序代码逻辑没有错,只是因为用户错误操作或者一些“例外情况”而导致的程序崩溃
Python提供了异常处理机制,可以在异常出现时即使捕获,然后内部“消化”,让程序继续运行
多个except结构
捕获异常的顺序按照先子类后父类的顺序,为了避免遗漏可能出现的异常,可以在最后增加BaseException
try:
a=int(input('请输入第一个整数'))
b=int(input('请输入第二个整数'))
c=a/b
print(c)
except ZeroDivisionError:
print('除数不能为0')
except ValueError:
print('输入错误')
try...except...else结构
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块。
try:
n1=int(input('请输入一个整数:'))
n2=int(input('请输入另一个整数:'))
result=n1/n2
except BaseException as e:
print('出错了',e)
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('出错了',e)
print('e')
else:
print('结果为:',result)
finally:
print('无论是否产生异常,总会被执行的代码')
print('程序结束')
traceback模块
使用traceback模块打印异常信息
Python常见的异常类型
序号 | 异常类型 | 描述 |
1 | ZeroDivisionError | 除(或取模)零(所有数据类型) |
2 | IndexError | 序列中没有此索引(index) |
3 | KeyError | 映射中没有这个键 |
4 | NameError | 未声明/初始化对象(没有属性) |
5 | SyntaxError | Python语法错误 |
6 | ValueError | 传入无效的参数 |
#print(10/0) #ZeroDivisionError
#a=[1,2,3]
#print(a[3]) #IndexError
#b={'name':'张三','age':20}
#print(b['gender']) #KeyError
#print(c) #NameError
#int a=10 #SyntaxError
#a=int('hello') #ValueError
PyCharm开发环境的调试
断点
程序运行到此处,暂时挂起,停止执行。此时可以详细观察程序的运行情况,方便做出进一步的判断。
进入调试视图的三种方式
- 单击工具栏上的按钮
- 右键单击编辑区:点击:debug‘模块名’
- 快捷键:shift+F9