python基础笔记10—Bug

本文介绍了Python编程中常见的错误类型,包括语法错误、逻辑错误和异常处理。详细解析了因粗心导致的语法错误,如缩进、符号和拼写问题,并提供了修正方法。同时,讨论了知识不熟练导致的错误,如索引越界,以及如何通过异常处理机制进行错误检查。此外,还讲解了PyCharm的调试技巧,如设置断点和进入调试视图的方法,帮助开发者更好地排查和解决问题。
摘要由CSDN通过智能技术生成


在这里插入图片描述

常见Bug的分类

粗心导致的语法错误SynataxError

  • Bug自查:
    1.漏掉末尾的“:”,如if,else语句,for,while循环。
    2.缩进错误,该缩进的没缩进,不该缩进的瞎缩进。
    3.英文符号写成中文符号,如逗号,括号,冒号,引号。
    4.字符串拼接时,把字符串和数字拼在一起。
    5.没定义变量。如while的循环条件的变量。
    6.=和==混淆使用,=表示赋值,==表示比较。
    7.英文单词拼写错误。
age=input('请输入你的年龄:')#注意age=input()的类型为str而非int
'''解决方法2:age=int(input('xxxx'))'''
#解决方法2:
if int(age)>=18:
    print('成年人,可负法律责任')
else:
    print('未成年')
i=0    #要定义变量
while i<10:
    i += 1   #要给出迭代
    print(i)
i=0     #定义变量
for i in range(3):
    pwd=input('请输入密码:')
    if pwd=='1234':   #这里是比较pwd和1234,故用==
        print('密码正确')
        break
    else:
        print('密码不正确')
else:
    print('您的账户已被锁定')

知识不熟练导致的错误

如:

  • 索引越界问题IndexError
lst=[1,2,3,4]
#print(lst[4])#报错,列表索引从0开始,这个lst的索引范围是0-3
print(lst[3]) #4
  • append()方法使用不熟练
    1.是对列表的增操作:列表名.append()
    2.一次只能添加一个元素
lst=[1,2,3,4]
lst.append(5)#[1,2,3,4,5]
print(lst)

解决: 练习!!!!!

思路不清晰导致的问题

  • 解决方案:
  1. 使用print()函数
  2. 用#暂时注释部分代码
    例:
    豆瓣电影top20排行,用列表储存电影信息,要求:
    输入名字在屏幕上显示xxxx出演了哪部电影。
lst=[{'rating':[9,7,50],'id':1292952,'type':['犯罪','剧情'],'title':'肖申克的救赎','actors':['蒂姆.罗宾斯','摩根.弗里曼']},
     {'rating':[9,6,50],'id':1291546,'type':['剧情','爱情'],'title':'霸王别姬','actors':['张国荣','巩俐','张丰毅','葛优']},
     {'rating':[9,6,50],'id':1296141,'type':['犯罪','嫌疑'],'title':'控方证人','actors':['泰隆.鲍华','玛琳.戴德利']}]
name=input('请输入要查询的演员:')
for item in lst:  #遍历裂变,得到一个{}
    actors = item['actors']# 这里遍历的结果为key为actors的对应的value
   # print(actors)
    if name in actors:
        print(name + '出演了' + item['title'])
        break
else:
    print('查找错误')

被动掉坑

程序代码逻辑没错,但由于用户的错误操作或‘例外情况’导致程序崩溃
例:输入2个整数并进行除法运算

a=int(input('请输入整数:'))
b=int(input('请输入另一个整数:'))
c=a/b
print('c=',c)
  • 解决方案:python提供了异常处理机制,可在异常出现时及时捕获,然后内部“消化”,让程序继续运行

异常处理机制

  1. try…except 结构
try:
	可能出现异常的代码块
except  错误类型1:
    出现异常时的处理代码
except  错误类型2:
    出现异常时的处理代码
.......
except BaseException as e:
    print(e)

注意: 捕获异常的顺序按照先子类后父亲类的顺序,为避免遗漏可能出现的异常,可在最后增加BaseException

try:
    a = int(input('请输入整数:'))
    b = int(input('请输入另一个整数:'))
    c = a / b
    print('c=', c)
except ZeroDivisionError:
    print('除数不能为0')
except ValueError:
    print('只能输入数字')
except BaseException as e:
    print(e)
  1. try…except…else 结构
    若try块抛出异常,则执行except块;try块没抛出异常,则执行else块
try:
    a = int(input('请输入整数:'))
    b = int(input('请输入另一个整数:'))
    c = a / b
except ZeroDivisionError:
    print('除数不能为0')
except BaseException as e:
    print('出错了',e)
else:
	print('c=', c)
  1. try…except…else…finally 结构
    无论程序是否出错都会执行finally块,能用来释放try块中申请的资源
try:
    a = int(input('请输入整数:'))
    b = int(input('请输入另一个整数:'))
    c = a / b
except ZeroDivisionError:
    print('除数不能为0')
except BaseException as e:
    print('出错了',e)
else:
	print('c=', c)
finally:
	print('无论是否产生异常,总会被执行的代码')
print('程序结束')

python中常见的异常类型

  • ZeroDivisionError:除以(取模)0
  • IndexError:序列中无此索引,如索引越界
  • KeyError:映射中没有这个键
  • NameError:未定义、初始化对象
  • SyntaxError: python语法错误
  • ValueError:传入无效的参数
dic={'name':'张三','age':20,}
print(dic['name'])#张三,输出键name对应的值
print(dic['gender'])#KeyError,字典中没有键gender

异常处理机制

  1. traceback模块
    可打印异常信息
import traceback#导入traceback
try:#这部分写可能出错的代码
	print( '----------------------- ' )
	num=10/0
except:
	traceback.print_exc()

返回结果

-----------------------------------------------
Traceback (most recent call last):
  File "D:\python练习\demo10.py", line 85, in <module>
    num=10/0
ZeroDivisionError: division by zero

PyCharm开发环境的调试

断点

在可能出问题或者需要调试的代码行左侧单击左键
在这里插入图片描述

进入调试视图的三种方式

  • 右键—>Debug
  • 单击工具栏上的Run—>Debug
  • 快捷键:shift+F9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值