Python异常处理
异常
- 广义上的错误分为错误和异常
- 错误指的是可以人为避免
- 异常是指在语法逻辑正确的前提下,出现的问题
- 在python里,异常是一个类
- 异常处理
-
不能保证程序永远正常运行
-
但必须保证程序在最坏的情况下得到的问题被妥善处理
-
python 异常处理模块语法
try:
尝试运行,如无异常,任务完成;如异常,将异常从当前代码块扔出尝试解决异常
except 异常类型1:
处理方法
except(异常类型1,异常类型2,…):
处理方法
except:
所有异常的解决方案
else:
如无异常,将执行此代码
finally:
无论有没有异常都要执行此代码
-
- 用户手动引发异常
- 当某些情况是,用户希望自己引发一个异常时,可以使用raise关键字来引发异常
#异常案例
try:
num=int(input("输入值"))
rst=100/num
#捕获异常,把异常实例化,出错信息会在实例里
except ZeroDivisionError as e:
print("输入有误")
print(e)
# exit()
except Exception as e:
print("未知错误")
print(e)
else:
print(rst)
finally:
print("程序结束")
输入值a
未知错误
invalid literal for int() with base 10: 'a'
程序结束
#raise案例
#自定义异常
#需注意,自定义异常必须是系统异常的子类
class DanaError(ValueError):
pass
try:
print("woaiwang")
print(3.1415926)
#手动引发一个异常
#语法: raise ErrorEClassName
raise ValueError
except NameError as e:
print("NameError")
except ValueError as e:
print("ValueError-用户手动")
except Exception as e:
print("未知错误")
finally:
print("我肯定会被执行")
woaiwang
3.1415926
ValueError-用户手动
我肯定会被执行
# 登录函数
def login():
pwd = input('请输入密码:')
if len(pwd) == 6:
return pwd
# 创建异常对象
ex = Exception('长度不符合')
# 抛出异常对象
raise ex
#
login()
请输入密码:44
---------------------------------------------------------------------------
Exception Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_26880/3100399982.py in <module>
10 raise ex
11 #
---> 12 login()
~\AppData\Local\Temp/ipykernel_26880/3100399982.py in login()
8 ex = Exception('长度不符合')
9 # 抛出异常对象
---> 10 raise ex
11 #
12 login()
Exception: 长度不符合