7.Python如何处理异常

1、异常捕获

1.1、语法格式

# 单个异常
try:
  可能产生异常的代码
except 异常类型名称 as 对异常类型名称重新命名:
  异常处理
      
# 多个异常
try:
  可能产生异常的代码
except (异常类型名称1,异常类型名称2,...) as 对异常类型名称重新命名:
  异常处理

1.2、捕获单个异常

# 处理打开一个文件产生的有可能产生异常
try:
  open('test.txt')
  print('打开文件成功!')
except FileNotFoundError as error:
  print('捕获到异常',error)
print('结束')

1.3、捕获多个异常

# 处理打开一个文件产生的有可能产生异常和打印一个不存在变量异常
try:
  # 打开文件
  open('test.txt') 
  #打印不存在变量
  print(file)
except (FileNotFoundError,NameError) as error:
  print('捕获到异常',error)
print('结束')

1.4、捕获全部异常

# 处理打开一个文件产生的有可能产生异常和打印一个不存在变量异常
try:
  # 打开文件
  open('test.txt') 
  #打印不存在变量
  print(file)
except NameError as error: 
  # 只捕获了NameError异常,没捕获FileNotFoundError异常
  print('捕获到部分异常',error)
except Exception as e:
  print('捕获到全部异常',e)
print('结束')

2、finally语句

如果某段代码必须要执行,不管是否有异常产生都要执行,那就需要使用finally语句了

#有异常
try:
  # 打开文件
  f = open('test.txt') 
  print('打开文件成功!')
except FileNotFoundError as error: 
  print('捕获到异常',error)
finally:
  print('关闭打开文件的连接')
  

#无异常
try: 
  print('打开文件成功!')
finally:
  print('必须执行代码')

3、异常传递

在遇到函数嵌套调用时,如果在函数内部调用的函数产生了异常,需要在外部函数被捕获并且处理,这就需要从内部调用函数把异常传递给外部函数,这就是异常传递

def test2():
  print("函数2开始")
  print(num) #打印不存在的变量产生异常
  print("函数2结束")
  
def test1():
  try:
    print("函数1开始")
    #调函数2
    test2()
    print("函数1结束")
  except Exception as e:
    print('捕获到异常',e)
    

#调函数1
test1()

4、raise抛出异常

在代码中如果我们自己想抛出异常,就可以使用Python中的raise语句

def div(a,b):
  if b == 0:
    raise ZeroDivisionError('异常原因:除法运算,除数不能为0!')
  else:
    return a/b
  
#调用
div(1,0)