大家好,我是阳哥。
异常处理在工程文件中必不可少,今天就带大家彻底搞定异常处理。
异常处理
在python
中我们使用try
和except
关键字来捕获异常:
- try下写:不确定能不能正常执行的代码
- except下写:如果try下的代码执行失败时要执行的代码
例1
要求用户输入整数:
try:
# 不确定能不能正常执行的代码
num = int(input("请输入一个数字:"))
except:
# 如果try下的代码执行失败时要执行的代码
print("请输入一个正确的数字!")
输入:`z`
输出:请输入一个正确的数字!
错误类型捕获
在程序执行时,可能会报不同的错误。如果需要针对不同类型的异常做出不同的响应,就需要指定错误类型了:
try:
#尝试执行的代码
pass
except 错误类型1:
#针对错误类型1,对应的代码处理
pass
except(错误类型2,错误类型3):
#针对错误类型2和3对应的代码处理
pass
except Exception as result:
# 除了123之外的错误
print("未知错误 %s" %result)
例2
提示用户输入一个整数,使用8除以用户输入的整数并且输出:
while True:
try:
# 提示用户输入一个整数
num = int(input("输入一个整数:"))
# 输入不是整数就报错,输入0也是报错,这里我们需要捕获异常
result = 8 / num
print(result)
except ZeroDivisionError:
print("错误,除数不能为0")
except ValueError:
print("请输入数字")
# 捕获未知错误
except Exception as result:
print("未知错误 %s" %result)
异常捕获中,也可以使用else
与finally
关键字:
- else:没异常会执行的代码
- finally:无论是否有异常,都会执行的代码
例3
异常捕获的完整语法:
try:
# 提示用户输入一个整数
num = int(input("输入一个整数:"))
# 输入不是整数就报错,输入0也是报错,这里我们需要捕获异常
result = 8 / num
print(result)
except ValueError:
print("请输入数字")
except Exception as result:
print("未知错误%s" % result)
else:
print("尝试成功!")
finally:
print("无论是否出现错误都会执行的代码")
输入:`z`
输出:请输入数字
输出:无论是否出现错误都会执行的代码
异常的传递
从产生异常的地方开始传递到调用异常的地方,如果一直没有处理异常,就会一直传递到主函数,然后停止程序并报出异常信息。
例4
def demo1():
return int(input("请输入一个整数:"))
def demo2():
return demo1()
print(demo2())
输入:`z`
报错信息会一直传递到主程序,然后停止:
所以说,只需要在主程序中做一个异常处理就可以完成代码的异常处理。
def demo1():
return int(input("输入整数:"))
def demo2():
return demo1()
#利用异常的传递性,在主程序捕获异常
try:
print(demo2())
except Exception as result:
print("程序出现了%s错误"%(result))
主动抛出异常raise
python中提供了Exception
异常类。在开发时,如果满足特定业务的需求希望抛出异常时,可以创建一个Exception
的对象,使用raise
关键字抛出异常对象。
例5
提示用户设置密码,如果用户输入长度<8,则抛出异常:
def input_password():
#1.提示用户输入密码
result =input("请输入密码")
#2.判断密码长度 >=8 ,返回用户输入的密码
if len(result) >=8:
return result
#3.如果<8 主动抛出异常
print("主动抛出异常!")
#1>创建异常对象 -可以使用错误信息字符串作为参数
ex =Exception("密码长度不够!")
#2> 主动抛出异常
raise ex
#提示用户输入密码
try:
print(input_password())
except Exception as result:
print(result)