python 异常处理

目录

  异常

  报错、报错类型

  异常处理

    一般异常处理语句

    不同类型异常单独处理语法

    不同类型异常统一处理语法

    try...expect...else

    try...expect...else...finally

    捕获异常

 

    抛出异常

异常?

  异常是一个事件,该事件在程序执行的过程中发生,影响程序的正常运行。

  异常在python中是一个对象,程序在运行中,发生异常,没有捕获异常程序会中断。

报错类型

print(x)

# error:
# NameError: name 'x' is not defined. 

说明:

  NameError为报错类型。

异常处理

  如果你不想在异常发生时结束程序的运行,使用try/except捕获异常。

一般异常处理语句

  语法:

try:
    被检测的代码块
except:
    检测到异常,就执行这个位置的逻辑

  说明:

  1. 如果try语句发生错误时,就会执行expect语句,处理异常。

  2. 如果try语句没有发生异常,不会执行expect语句。

不同类型异常处理语句

  语法:

try:
    被检测的代码块
except NameError:
    触发NameError时对应的处理逻辑
except IndexError:
    触发IndexError时对应的处理逻辑
except KeyError:
    触发KeyError时对应的处理逻辑

  案例:

try:
    print(x)
except IndexError:
    print("IndexError")
except NameError:
    print("NameError")

# input
# NameError

  

不同类型异常统一处理语句

  语法:

try:
    被检测的代码块
except (NameError,IndexError,TypeError):
    触发NameError或IndexError或TypeError时对应的处理逻辑

  案例:

try:
    print(x)
except (IndexError, NameError):
    print("hello world")

  

不同类型异常一种语句处理

  语法:

try:
    被检测的代码块
except Exception:
    其他类型的异常统一用此处的逻辑处理

  案例:

try:
    print(x)
except Exception:
    print("hello world")

# input
# hello world

  

try...expect...else

  多分支except之后跟else(else只能跟在except后,不能单独处在),

  只有在try语句中没有异常发生情况下,才会执行else语句。

  语法:

try:
    被检测的代码块
except 异常类型1:
    pass
except 异常类型2:
    pass
else:
    没有异常发生时执行的代码块

  

try...expect...else...finally

  无论被检测的代码块是否触发异常,都会执行finally的子代码块。

  作用:一般作为回收资源。如:关闭打开的文件;关闭数据库连接等。

  语法:

try:
   被检测的代码块
except 异常类型1:
   pass
except 异常类型2:
   pass
else:
   没有异常发生时执行的代码块
finally:
   无论有无异常发生都会执行的代码块

  案例:

f=None
try:
    f=open(‘db.txt’,'r',encoding='utf-8')
    s=f.read().strip()
    int(s)  # 若字符串s中包含非数字时则会触发异常ValueError
    # f.close() # 若上面的代码触发异常,则根本不可能执行到此处的代码,应该将关闭文件的操作放到finally中
finally:
    if f: # 文件存在则f的值不为None
        f.close()

  

捕获异常

  处理程序异常的同时,后去异常的内容。

  语法:

try:
    #code- run 
except NameError as e:
    # get error

  案例:

try:
    print(x)
except Exception as e:
    print(e)

# input
# name 'x' is not defined

  

抛出异常

  raise主动抛出异常,raise后必须是一个异常的类或是异常的实例。

  案例:

a = "a"

if not isinstance(a, int):
    raise TypeError("a is not int type.")

# input
"""
Traceback (most recent call last):
  File "d:\tools\test.py", line 4, in <module>
    raise TypeError("a is not int type.")
TypeError: a is not int type.
"""

  

 

posted @ 2021-11-20 21:05  zhuang6  阅读(73)  评论(0编辑  收藏  举报