python基础 bug相关
bug常见类型
序号
|
异常类型
|
描述
|
1
|
ZeroDivisionError
|
除(或取模)零(所有数据类型)
|
2
|
IndexError
|
序列中没有此索引(index)
|
3
|
KeyError
|
映射中没有这个键
|
4
|
NameError
|
未声明\初始化对象(没有属性)
|
5
|
SyntaxError
|
Python语法错误
|
6
|
ValueError
|
传入无效的参数
|
粗心导致语法错误syntaxError
# bug
# 错误代码
age = input('年龄:')
if age >= 18:
print('成年人')
# 正确代码
age = input('年龄:')
if int(age) >= 18:
print('成年人')
# 错误代码
while i < 10:
print(i)
# 正确代码
i = 0
while i < 10:
print(i)
i +=1
# 错误代码
for i in range(3):
uname = input('账号:')
psw = input("密码:")
if uname='a' and psw='b':
continue
# 正确代码
for i in range(3):
uname = input('账号:')
psw = input("密码:")
if uname=='a' and psw=='b':
continue
自查方法
1.检查末位冒号,如if语句、循环语句等
2.检查缩进
3.检查是否含有中文符号
4.字符串拼接的时候,是否把字符串与数字拼接
5.检查有没有定义变量
6.比较运算符‘==’和赋值运算符‘=’的混用知识点
不熟练导致错误
索引越界问题IndexError
列表追加错误NameError、TypeError
# IndexError
lst = [1, 2, 3, 4]
print(lst[4])
#NameError
lst=[]
lst = append('1')
print(lst)
# TypeError
lst=[]
lst.append('1','2')
print(lst)
例外情况
# 例外情况
a = input("请输入整数:")
b = input("请输入整数:")
c = int(a)/int(b)
print(c)
不同异常类型的处理方式
try:
a = input("请输入整数:")
b = input("请输入整数:")
c = int(a) / int(b)
print(c)
except ZeroDivisionError:
print("输入有误,请输入非0整数")
except ValueError:
print("输入有误,请输入数字")
异常处理机制
多个except结构
捕获异常的顺序按照先子类后父类,为了避免一楼可能出现的异常,可以在最后增加BaseException
try:
a = input("请输入整数:")
b = input("请输入整数:")
c = int(a) / int(b)
print(c)
except ZeroDivisionError:
print("输入有误,请输入非0整数")
except ValueError:
print("输入有误,请输入数字")
except BaseException as e:
print(e)
try..except..else结构
如果try块没有抛出异常,则执行else块,如果try中抛出异常,则执行except块
# try..excepy..else结构
try:
a = input("请输入整数:")
b = input("请输入整数:")
c = int(a) / int(b)
except ZeroDivisionError:
print("输入有误,请输入非0整数")
except ValueError:
print("输入有误,请输入数字")
except BaseException as e:
print(e)
else:
print("结果为:", c)
try..excepy..else..final结构
finally块无论是否发生异常都会被执行,能常用来释放try块中申请的资源
# try..excepy..else..final结构
try:
a = input("请输入整数:")
b = input("请输入整数:")
c = int(a) / int(b)
except ZeroDivisionError:
print("输入有误,请输入非0整数")
except ValueError:
print("输入有误,请输入数字")
except BaseException as e:
print(e)
else:
print("结果为:", c)
finally:
print("程序结束")
Traceback模块的使用
import traceback
try:
print("...")
print(1/0)
except:
traceback.print_exc()
pycharm的调试模式
断点:程序运行到此暂时挂起,停止执行。此时可以详细观察程序的运行情况方便做出进一步的判断