Python自学第十一天——Bug

2023-11-16

作为新手自学Python的第十一天,技术低微,希望可以通过这种方式督促自己学习。

个人学习环境:python3.9,PyCharm 2021.3.2 (Community Edition)

———————————————————————————————————————————

本文仅做Bug基本知识梳理和简单解决方法简述,具体Bug分析请自由发挥。

———————————————————————————————————————————

1、Bug的分类

1.1 Bug的常见类型

1.1.1粗心导致的语法错误 SyntaxError

(1)数据格式问题

age = input('请输入你的年龄:')
print(type(age))
if age >= 18:
    print('需要负法律责任')
"""
结果为:
请输入你的年龄:18
<class 'str'>
Traceback (most recent call last):
  File "D:\pythonProject\demo\demo1.py", line 6, in <module>
    if age >= 18:
TypeError: '>=' not supported between instances of 'str' and 'int'
"""
# 修改
age = input('请输入你的年龄:')
print(type(age))
if int(age) >= 18:
    print('需要负法律责任')

(2)while错误使用

# i 没有初始值,添加即可
i = 0
while i < 10:
    print(i)
# 循环错误,i一直为0,无限循环,添加约束条件即可
    i += 1

(3)代码编写时输入法错误

代码编写必须使用英语编写,包括标点(字符串内可使用中文)

(4)等号的错误使用

'='是赋值,'=='是判断

自查方法:

1、漏了末尾的冒号

2、缩进错误

3、把英文符号写成了中文符号

4、字符串拼接时,是否把字符串和数字进行了拼接

5、没有定义变量

6、'=='和'='混用

1.1.2 知识不熟练导致的错误

(1)索引越界问题IndexError

lst = [11, 22, 33, 44]
print(lst[4])   # lst数组下标从0开始,到3结束

(2)append()方法的使用掌握不熟练

lst = []
# lst = append('A', 'B', 'C')       # append方法是.append这样的
lst.append('A')     # 并且append方法每次只添加一个元素
lst.append('B')
lst.append('C')
print(lst)

解决方法:多加练习

1.1.3 思路不清导致的错误

解决方法:在问题代码前后先print获取的元素,查看获取思路是否有误;再将有错误的代码先注释掉,重新理清思路然后修改代码

1.1.4 程序代码逻辑无误,因为用户错误操作导致崩溃

Python提供了异常处理机制,可以在异常出现时即时捕获,然后内部处理,让程序继续运行

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a/b
    print('结果为:', result)
except ZeroDivisionError:
    print('除数不能为0!')

捕获异常的顺序按照先子类,后父类的顺序

为了避免多个问题,可以采用多个except结构。为了遗漏可能出现的异常,可以最后增加BaseException

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a/b
    print('结果为:', result)
except ZeroDivisionError:
    print('除数不能为0!')
except ValueError:
    print('只能输入数字!')
except BaseException as e:
    print(e)

try…except…else结构:

try部分没有抛出异常,执行else部分;try部分抛出异常,执行except部分

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a / b
except BaseException as e:
    print('出错了', e)
else:
    print('计算结果为:', result)

try…except…else…finally结构:

finally部分无论是否发生异常都会被执行,常用来释放try部分中申请的资源

try:
    a = int(input('请输入第一个整数'))
    b = int(input('请输入第二个整数'))
    result = a / b
except BaseException as e:
    print('出错了')
    print(e)
else:
    print('计算结果为:', result)
finally:
    print('感谢使用')
print('结束')

2、常见的异常类型

异常类型 说明
ZeroDivisionError 数学运算异常,用0当除数
IndexError 序列中没有这个索引(index)
KeyError 映射中没有这个Key键
NameError 未声明/初始化的对象
SyntaxError 语法错误
ValueError 无效的参数

3、traceback模块

使用traceback模块打印异常信息

import traceback
​
try:
    print('——————————————')
    print(1 / 0)
except:
    traceback.print_exc()

4、调试基本知识

断点:程序运行至此处暂时挂起停止执行。

注意:如果看到这样一个错误ImportError: cannot import name 'eq' from 'operator'以及类似的错误,有可能是因为你同文件夹下有文件名称为operator,这是系统文件,会引起冲突。解决方法就是将自己文件夹下的operator文件改名即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python自学第十一天——Bug 的相关文章

随机推荐

  • 信号盒子连接服务器,【当贝市场】简单4步解决电视盒子没信号问题

    原标题 当贝市场 简单4步解决电视盒子没信号问题 看电视是家庭娱乐方式 很多家庭都喜欢用电视机顶盒来看电视直播 很多用户也会遇到一个问题就是机顶盒没信号怎么看电视直播呢 大家都知道机顶盒看直播 都是在有网有信号的状态下才能完美呈现呢 机顶盒
  • element Plus Select选择器实现查询搜索 下拉选择

    这Select选择器用于哪里 怎么用 Select 选择器可以用于许多不同的场景 包括但不限于以下几个方面 表单 Select 选择器常用于表单中的下拉选择字段 例如选择国家 城市 性别 职位等 用户可以从预定义的选项中选择一个值 以便提交
  • gd32f103 串口数据处理说明

    1 数据接收或发送完毕 发出复位信号 GetBitState USART 接收数据 ch U8 USART DataReceive USART1 类似 C51 直接向寄存器写数据自动发送 UART1 SendChar ch 2 操作逻辑 发
  • 一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路?

    一个机器人位于一个 m x n 网格的左上角 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 问总共有多少条不同的路 var machinePath1 function m n var arr new Array m n i
  • Deformable DETR源码解读

    文章目录 一 网络创新点 二 流程详解 part 1 deformable detr模块 part 2 deformable transformer模块 part3 Encoder模块 part 4 MSDeformAttn part5 D
  • Linux系统调试之gdbserver远程调试程序

    本篇讲解如何使用gdbserver对目标开发板上的程序进行远程调试 安装 GDBSERVER 首先在开发板上安装 gdbserver apt install gdbserver gdbserver 用法 gdbserver用法描述 Usag
  • redis概述-1

    视频链接 尚硅谷 Redis 6 入门到精通 超详细 教程 哔哩哔哩 bilibili 早期架构 随着web2 0 手机端和pc端的请求增加 应用服务器会有cpu及内存压力 数据服务器有IO压力 针对应用服务器 采用分布式 负载均衡的方式进
  • ILRuntime Unity热更新

    在新的项目中 使用到了ILRuntime的热更新方式 不同于XLua等 这种方式的热更新是由纯C 实现的 所以就不需要客户端懂Lua的代码 更详细的介绍可以看官方的文档 官方的介绍及文档为 http ourpalm github io IL
  • vcpkg安装和使用--学习入门

    前言 vcpkg是一个C 的包管理器 包管理器是专门管理一些代码库的 比如一些大佬们开源的一些NB的框架 我们可以用vcpkg将他们放到自己的项目中 然后就可以直接用了 我用的win10 vs2019 1 安装 1 先git clone下载
  • openwrt中计划任务的设置

    寝室的供网规则为周一到周五零点断网 六点开网 双休日通宵供网 故设置一套计划任务提高路由器使用效率 crontab命令常见于Unix和类Unix的操作系统之中 用于设置周期性被执行的指令 操作符号 在一个区域里填写多个数值的方法 逗号 分开
  • AcWing基础课题集汇总

    本篇博文是笔者归纳汇总的AcWing基础课题集 方便读者后期复盘巩固 PS 本篇文章只给出完整的算法实现 并没有讲解具体的算法思路 如果想看算法思路 可以阅读笔者往期写过的文章 或许会有 也可以移步AcWing官网看详情 本篇文章的特点 每
  • Qt应用开发(基础篇)——时间类 QDateTime、QDate、QTime

    一 前言 时间类QDateTime QDate QTime QTimeZone保存了Qt的时间 日期 时区信息 常用的时间类部件都会用到这些数据结构 常用概念有年 月 日 时 分 秒 毫秒和时区 时间和时区就关系到时间戳和UTC的概念 UT
  • Debian(Linux)系统Samba安装和配置

    samba安装 root用户下直接使用以下命令 apt get install samba 若是普通用户下使用以下命令 sudo apt get install samba samba配置 samba的配置文件在 etc samba 路径下
  • 1-2动态图

    文章目录 动态图 一 环境配置 二 基本用法 三 使用python的控制流 四 构建更加灵活的网络 控制流 五 构建更加灵活的网络 共享权重 The End 动态图 在这种模式下 每次执行一个运算 可以立即得到结果 而不是事先定义好网络结构
  • 基本数据类型的包装类

    本人之所以把包装类作为单独一篇博文来写 主要是因为这里知识比较冗杂 为了帮助大家比较好的理解深层次的东西而不是做一个搬砖的这里我有必要单开一篇博文来了解下 首先我们来分析一下基本数据类型和包装类 包装类是对象 拥有方法和字段 对象的调用都是
  • Python异常处理总结

    Python异常处理总结 这篇文章主要介绍了Python异常处理总结 需要的朋友可以参考下 本文较为详细的罗列了Python常见的异常处理 供大家参考 具体如下 1 抛出异常和自定义异常 Python用异常对象 exception obje
  • 《Java基础——制表符》

    Java基础 制表符 规则 若前面输出内容不为8的倍数 则通过空格补全 不足八位 补全八位 例一 不足八位 System out println 123456 t 空格补位 编译结果 123456 空格补位 例二 大于等于八位 System
  • 对高精度PWM(HRPWM)的理解

    传统PWM的精度 假定CPU工作频率为100MHz PWM模块的计数频率也一样 则计数周期为10ns 假设PWM的开关频率为1MHz 使用向上计数模式 那么 计数周期PRD等于100 此时 比较值只能在0 100里面选 占空比的精度只有1
  • mysql语法之update

    Update 语句 1 作用 Update 语句用于修改表中的数据 语法 UPDATE 表名称 SET 列名称 新值 WHERE 列名称 某值 1 建表语句 create table table1 idd varchar 10 val va
  • Python自学第十一天——Bug

    作为新手自学Python的第十一天 技术低微 希望可以通过这种方式督促自己学习 个人学习环境 python3 9 PyCharm 2021 3 2 Community Edition 本文仅做Bug基本知识梳理和简单解决方法简述 具体Bug