异常是程序执行力过程当中出现的非正常的流程项目。
异常是没法避免的,只能先预估出可能出现的异常现象,并提供对应的处理机制,在异常出现后保障程序不被中断执行。
复制代码
格式一(经常使用):python
try:
可能引起异常现象的代码
except:
出现异常现象的处理代码
复制代码
try:
print(a) # 可能引起异常现象的代码
except:
print("变量a未定义") # 出现异常现象的处理代码
复制代码
格式二(不经常使用):函数
try:
可能引起异常现象的代码
finally:
try代码块结束后运行的代码
复制代码
格式三(完整格式):spa
try:
可能引起异常现象的代码
except:
出现异常现象的处理代码
else:
未出现异常现象的处理代码
finally:
try代码块结束后运行的代码
复制代码
异常处理能够根据不一样种类的异常进行不一样的处理方案设计,使用异常名称来进行区分。标准格式以下:
except 异常类名1 as 变量名:
出现异常现象的处理代码
except 异常类名2 as 变量名:
出现异常现象的处理代码
except 异常类名3 as 变量名:
出现异常现象的处理代码
except Exception as 变量名:
出现异常现象的处理代码
复制代码
try:
c = 0
b = a /c
print("b")
except NameError as error: # 经过异常类名后面的变量名能够获取到具体异常信息
print("a没有被定义:"+ str(error))
except ZeroDivisionError as error:
print("被除数不能为零"str(error))
except Exception as error:
print("未知错误"str(error))
复制代码
上段代码执行结果:设计
a没有被定义:name 'a' is not defined
复制代码
说明:code
异常对象可使用主动抛出的形式来构造,语法格式:对象
raise 异常对象
复制代码
if y == 0:
raise ZeroDivisionError("被除数不能为零")
复制代码
异常出现后若是没有被捕获处理,该异常将会继续向下传递,到下一次调用位置。input
状况一:使用 try 嵌套处理string
"""使用 try 嵌套处理,先处理内层的异常,处理完后再处理外层异常"""
try:
try:
c = 0
b = a /c
print("b")
except NameError as error:
print("a没有被定义:"+ str(error))
except ZeroDivisionError:
print("被除数不能为零")
except Exception:
print("未知错误")
复制代码
状况二:函数、/方法调用,在任意位置处理it
"""最后调用处理"""
def oper1():
print( 1 / 0 )
def oper2():
oper1()
def oper3():
oper2()
try:
oper3()
except:
print("处理")
复制代码
"""中间调用处理"""
def oper1():
print( 1 / 0 )
def oper2():
try:
oper1()
except:
print("处理掉")
def oper3():
oper2()
oper3()
复制代码
class 自定义异常类名(Exception):
pass
复制代码
raise 异常类对象
复制代码
""" 案例:用户登陆信息校验 要求: 用户输入用户名,密码后对信息进行校验 1.用户名长度在3-8个字符 2.用户名中只能出现英文字母和数字 3.密码长度必须是6位 4.密码必须由纯数字组成 分析: 1.信息使用input操做获取 2.定义自定义异常,描述非法信息 3.提供检测的函数,针对状况进行处理 4.执行程序中要使用try结构完成检测 """
class NameError(Exception):
pass
class PwdError(Exception):
pass
def login(name,password):
if not 3<= len(name) <= 8:
raise NameError("用户名长度必须在3到8之间")
if not name.isalnum():
raise NameError("用户名必须由字母和数字组成")
if len(password) != 6:
raise PwdError("密码的长度必须等于6位")
if not password.isnumeric():
raise PwdError("密码必须由纯数字组成")
name = input("请输入用户名:")
password = input("请输入密码:")
try:
login(name, password)
except NameError as error:
print(str(error))
except PwdError as error:
print(str(error))
else:
print("信息无误,能够正常使用")
复制代码