• Python学习基础笔记七十三——调试程序


    为什么要调试?

    我们发现程序运行的结果和我们预期的不符。

    程序运行的错误,我们通常叫做bug。

    有两种类型的bug:语句错误逻辑错误

    所谓语句错误,就是执行代码的时候,解释器就可以直接发现的代码错误,他没有办法继续执行,直接就会报错。

    还有一种情况就是:

    解释器并不报错,只是运行的结果和我们预期的不一样。那这种就是逻辑错误。

    遇到逻辑错误,最有效的方法就是调试程序。

    所谓的调试程序,检查程序运行过程中的一些关键步骤里的变量,看看是否正确。从而判断出是哪里代码的问题。

    调试程序的方法:

    IDE断点调试方法:

    最常用的方法使用IDE的调试功能,在关键代码处设置断点。查看关键变量的值。

    什么是设置断点:

    设置断点,设置某些代码行位置,当程序运行到这些位置,就会暂停执行。

    我们在程序运行过程中,查看某些变量的值,必须要让运行的程序能停在相应的位置。

    说明:不要选run,run就是直接运行程序,不会停留在断点处。应该是选择debug。

    程序已debug模式运行了,并且会停留在刚刚设置的断点处。

    content变量还没有赋值,因为这条语句还没有执行。此处高亮行代码尚未被执行。

    step over:IDE就会让当前的程序执行当前行的代码。如果该行代码里有函数调用,执行不会暂停在函数里面,而是执行运行完所有的函数里面的代码,暂停在下一行代码。

    也就是单步执行。

    step into:IDE就会让当前的程序执行一步当前的代码。如果该代码里有函数调用,执行就会暂停在函数里面。

    这个按钮是resume program,这个是程序停留到下一个程序断点处。

    print出关键变量的值:

    如果没有继承开发环境IDE,可以在代码中增加很多代码打印语句。

    1. import requests
    2. # 用requests获取销量信息
    3. res = requests.get('https://cdn2.byhy.net/files/py/0016_price')
    4. content = res.content.decode('utf8')
    5. print(f'得到的字符串内容:{content}')
    6. # 下面两个变量记录当前找到的销量最多的手机和卖出数量
    7. # 初始值都是None
    8. mostsoldphone = None
    9. mostsoldcount = None
    10. for info in content.splitlines():
    11. info = info.strip()
    12. # 去掉空行
    13. if not info:
    14. continue
    15. items = info.split(',')
    16. # 销量在倒数第二列,获取销量信息
    17. soldcount = int(items[-2])
    18. # 型号在 第一列, 获取型号信息
    19. phonetype = items[0]
    20. # 如果前面已经有销量最多的手机记录,和当前这款手机销量比较
    21. if mostsoldphone:
    22. # 如果当前这款手机销量更高,把它置为最热卖手机
    23. print(f'mostsoldcount的值:{mostsoldcount}')
    24. print(f'soldcount: {soldcount}')
    25. print(f'程序判断: {mostsoldcount} < {soldcount}')
    26. if mostsoldcount < soldcount:
    27. # print(f'程序判断: {mostsoldcount} < {soldcount}')
    28. mostsoldcount = soldcount
    29. mostsoldphone = phonetype
    30. # 如果前面没有有销量最多的手机记录,说明这是第一条记录
    31. # 暂时先把它置为最热卖手机
    32. else:
    33. mostsoldcount = soldcount
    34. mostsoldphone = phonetype
    35. print(f'最热卖手机是 {mostsoldphone}, 销量是 {mostsoldcount}')

    执行结果是这个地方出现问题。是这个地方出现问题。估计是类型这块出现问题。 

  • 相关阅读:
    用CloudCompare软件拟合点云中的圆柱体
    开通经营收款码要手续费吗
    进程理论和实操
    对接钉钉Stream模式考勤打卡相关事件的指南
    合肥先进光源国家重大科技基础设施项目及配套工程启动会纪念
    Primavera Unifier 自定义报表制作及打印分享
    Nginx安装与配置
    深度学习入门(三十五)计算性能 编译器和解释器
    Cerebral Cortex:初为人父者竟然出现纵向灰质皮层体积减少?两个国际样本提供了这样的证据...
    函数指针和回调函数的简单应用
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/133864391