Python自学第十一天——Bug

作为新手自学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

Traceback (most recent call last):
  File "D:\pythonProject\demo\demo1.py", line 6, in 
    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文件改名即可。

你可能感兴趣的:(Python自学,python)