作为新手自学Python的第十一天,技术低微,希望可以通过这种方式督促自己学习。
个人学习环境:python3.9,PyCharm 2021.3.2 (Community Edition)
———————————————————————————————————————————
本文仅做Bug基本知识梳理和简单解决方法简述,具体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('结束')
异常类型 | 说明 |
---|---|
ZeroDivisionError | 数学运算异常,用0当除数 |
IndexError | 序列中没有这个索引(index) |
KeyError | 映射中没有这个Key键 |
NameError | 未声明/初始化的对象 |
SyntaxError | 语法错误 |
ValueError | 无效的参数 |
使用traceback模块打印异常信息
import traceback
try:
print('——————————————')
print(1 / 0)
except:
traceback.print_exc()
断点:程序运行至此处暂时挂起停止执行。
注意:如果看到这样一个错误ImportError: cannot import name 'eq' from 'operator'以及类似的错误,有可能是因为你同文件夹下有文件名称为operator,这是系统文件,会引起冲突。解决方法就是将自己文件夹下的operator文件改名即可。