Python3 错误和异常
没有异常处理机制
当我们敲代码时,总时会出现一些语法错误,执行时就会报错,提示我们是什么类型的错误。这时我们就要去修改错误,直到没有语法错误,程序就不会报错(逻辑错误是不会报错的,逻辑错误就是程序执行结果与要达到的要求不同)
Value Error:值错误
ZeroDivisionError:除零错误
更多异常点击:等等这些错误
异常处理器 except
except 子句指定一个或多个异常处理器。 当 try 子句中没有发生异常时,没有异常处理器会被执行。 当 try 子句中发生异常时,将启动对异常处理器的搜索。 此搜索会依次检查 except 子句,直至找到与该异常相匹配的子句。 如果存在无表达式的 except 子句,它必须是最后一个;它将匹配任何异常。
代码示例
捕获错误类型
如果我们能够预知这些代码可能会出现什么样的错误,我们就可以直接捕获。
try:
# 提示用户输入一个整数
num = int(input("请输入一个整数:"))
# 使用 8 初一用户输入的整数并且输出
result = 8 / num
print(result)
except ZeroDivisionError:
print("除零错误")
except ValueError:
print("请输入正确的整数")
except:
print("其他错误")
但是我们有时候考虑不了那么全面,所以需要捕获未知的错误
捕获未知错误
try:
# 提示用户输入一个整数
num = int(input("请输入一个整数:"))
# 使用 8 初一用户输入的整数并且输出
result = 8 / num
print(result)
# except ZeroDivisionError:
# print("除零错误")
except ValueError:
print("请输入正确的整数")
except Exception as result:
print("未知错误 %s " % result)
使用
except Exception as result:
print("未知错误 %s " % result)
这种格式,就能够捕获未知错误了
完整的异常语法
try:
# 提示用户输入一个整数
num = int(input("请输入一个整数:"))
# 使用 8 初一用户输入的整数并且输出
result = 8 / num
print(result)
# except ZeroDivisionError:
# print("除零错误")
except ValueError:
print("请输入正确的整数")
except Exception as result:
print("未知错误 %s " % result)
else:
# 没有异常才会执行的代码
print("尝试成功")
finally:
# 不论是否出现错误都会执行的代码
print("不论是否出现错误都会执行的代码")
print("-" * 50)
异常具有传递性
def demo1():
return int(input("输入整数:"))
def demo2():
return demo1()
# 利用异常的传递性,在主程序捕获异常
try:
print(demo2())
except Exception as result:
print("未知错误 %s" % result)
首先执行print()函数里的demo2()–> demo2()执行 demo1()函数 --> demo1()接收到字母a,出现语法错误。–>将错误传递返回demo2() --> demo2()函数将错误传递回print()函数–>触发异常机制,执行触发机制。
我展示一下去掉try: except: 时出现的报错情况
自定义异常
def input_password():
# 1. 提示用户输入密码
pwd = input("请输入密码:")
# 2. 判断密码长度 >= 8 , 返回用户输入的密码
if len(pwd) >= 8:
return pwd
# 3. 如果 < 8 主动抛出密码
print("主动抛出异常")
# 1. 创建异常对象
ex = Exception("密码长度不够")
# 2. 主动抛出异常
raise ex
# 提示用户输入密码
while True:
try:
print(input_password())
break
except Exception as result:
print("未知异常:%s" % result)
print("请重新输入...")
print("提交密码")
如果密码不够长,告诉你密码长度不够
如果把try: except: 去掉,我们在输入密码:123,我们就能看见我们熟悉的界面了。
def input_password():
# 1. 提示用户输入密码
pwd = input("请输入密码:")
# 2. 判断密码长度 >= 8 , 返回用户输入的密码
if len(pwd) >= 8:
return pwd
# 3. 如果 < 8 主动抛出密码
# print("主动抛出异常")
# 1. 创建异常对象
ex = Exception("密码长度不够")
# 2. 主动抛出异常
raise ex
print(input_password())
小总结
很多源代码都会使用try: expcpt: 因为这样就能让代码更健壮,更稳定。即使出现Bug也不会使程序崩溃,让客户的体验感更好写。所以在开发程序时,使用try: except: 这种异常处理机制使必不可少的!!!
interactiveshell.py的源代码截图