python小白考前复习
异常处理
首先明确异常不等于错误
异常是用户没有按照我们的预期进行操作,错误是直接报错的内容
标准模式用伪代码块展示如下
try:
[代码块A]#可能会出现错误的代码 #异常检测
except Exception1[ as e]:#except用于捕捉异常
#异常处理
[代码块1]
···
except Exceptionn[ as e]:
#异常处理
[代码块n]
[else:]
#可选,如果没有引发异常会执行 处理语句
[finally :]
#无论如何都要执行的语句 处理语句
#后续语句
常见错误分类
NameError
pldknt()#函数名拼写错误
a="d"
print(aa)#变量名拼写错误
print(b)#使用了一个不存在的变量
SyntaxError
if "q"=="按顺序"#未写冒号的格式错误
print()#未缩进的IndentationError
TypeError
print(3+"2")#类型
tp=(1,2,3)
tp[2]=4
print(tp)#把列表的索引修改方式用在了元组上
AttributeError
tp=(1,2,3)
tp.append(4)
print(tp)#属性错误,用了列表的方法
KeyError
用了字典取不到的键
IndexError
能用索引的类型超出了索引范围
ZeroDivisionError
除数为零
ValueError
这个异常表明传入的参数值存在问题,通常是因为该值与期望的类型、范围或其他条件不匹配
try语句
这串代码是个标准的try模式
try:
n=int(input("请输入一个数字"))
n=5/n
print(n)
except ZeroDivisionError as e:#as e可以不写,它的作用是记录下报错信息,同时给异常取了个别名
print("除数不能为0")
print("原始报错信息",e)
except :#如果输入的不是数字会进入这里
print("请输入一个数字")
else:
print("没有异常进入else模块")
finally:
print("无论如何都会执行的finally模块")
finally通常是写释放资源、关闭文件、关闭数据等内容
当方法遇到异常又不知如何处理时就需要抛出异常
raise
有的时候,用户输入的信息可能没有问题,但不太符合我们的要求,我们需要扮演系统的角色主动向用户指出错误
就像有的行为“法律允许,但不提倡”
比如有的时候用户密码太简单了或长度太短了这种情况,我们当然可以用一个if else语句解决
pwd=input()
if len(pwd)<8:
print("")
else:
print("登录成功")
但是在实际开发中,我们为了便于后续维护等,我们需要把异常处理的情况交给专门做这件事的模块统一处理
try:
pwd=input()
if len(pwd)<8:
raise Exception("请输入8位以上的密码")#抛出异常
except Exception as e:#给异常取个名字
print(e)#打印“请输入8位以上的密码”
错误处理
- 运行,从报错信息找
- 打印断点和相关信息
for i in range(10):
for i in range(5):
print("*"*i)
这串代码把i混用了,打印出来了如下图案
*
**
***
****
*
**
***
****
*
**
***
****
*
**
***
****
*
**
***
****
*
**
***
****
*
**
***
****
*
**
***
****
*
**
***
****
*
**
***
****
我们可以通过设置断点找出错误,如
for i in range(10):
print("-"*30)
print(i)
for i in range(5):
print("neicengcxunhuan")
print(i)
print("*"*i)
- 用注释一点点排查
- 调试