异常+Bug
Bug的常见类型
粗心导致的语法错误SyntaxError
age = ('请输入你的年龄:')
print(type(age))
if age > 18:
print('成年人')
#TypeError: '>' not supported between instances of 'str' and 'int'
#解决方法
#改为 if int(age) > 18:
while i < 10:
print i
#SyntaxError: Missing parentheses in call to 'print'. Did you mean print(i)?
#问题:1.没有给i定义。2.无限循环
int i = 0
while i < 10:
print i
i+=1
…自查
- 漏了末尾的冒号,如if语句,循环语句,else子句等
- 缩进错误,该缩进的没缩进,不该缩进的瞎缩进
- 把英文符号写成中文符号,比如说:引号,冒号,括号
- 字符串拼接的时候,把字符串和数字拼在一起
- 没有定义变量,比如说while的循环条件的变量
- "==”比较运算符和”=”赋值运算符的混用
知识不熟练导致的错误
1.索引越界问题IndexError
list = [11,22,33,44]
print(list[4])
2.append()方法的使用掌握不熟练
list = []
list = append('a','b','c')
print(list)
思路不清导致的错误
- 使用print()函数
- 使用注释暂时注释掉错误代码
被动掉坑导致的错误
被动掉坑:程序代码逻辑没有错,只是因为用户错误操作或者一些“例外情况"而导致的程序崩溃
num1 = int(input(‘请输入第一个整数’))
num2 = int(input(‘请输入第二个整数’))
print(num1/num2)
解决方法
Python提供了异常处理机制,可以在异常出现时即时捕获,然后内部“消化”,让程序继续运行
1.使用try-except
try:
代码块
expext 异常1:
处理
expext 异常2:
处理
......
expext 异常n:
处理
2.try-except-else
如果try块中没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
3.try-except-else-finally
finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
异常
常见的异常
常见的异常 | 描述 |
---|---|
ZeroDivisionError | 除(或取模)零(所有数据类型) |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
NameError | 未声明/初始化对象(没有属性) |
SyntaxError | Python语法错误 |
ValueError | 传入无效的参数 |
traceback模块
使用traceback模块打印信息
import traceback
try:
print('------------')
num = 10/0
except:
traceback.print_exe()