异常处理

异常处理

1、异常处理

1.1 三问

  • 什么是异常
    异常是程序发生错误的信号,一旦程序出错python解释器就会产生一个异常
    如果该异常没有被处理,该异常就会抛出来,程序的运行也随即终止
  • 2、为何要处理异常
    增强程序的健壮性,鲁棒性
  • 3、如何处理异常

1.2 错误分类两大类:

  • 1、语法错误SyntaxError(程序运行前会先检测语法,语法不通过程序都不不会运行): 在程序运行前必须改正,不允许出现
  • 2、逻辑错误((程序运行时才会遇到逻辑错误):
    • (1) 尽量避免
    • (2) 针对无法预防的错误,解决方案-》补救

      1.3 代码示例

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      print("start...")
      try:
      被监测的代码1
      被监测的代码2
      被监测的代码3
      except 异常类型1 as e:
      处理异常的代码1
      except 异常类型2 as e:
      处理异常的代码2
      except (异常类型3,异常类型4) as e:
      处理异常的代码
      except Exception as e:
      处理异常的代码
      else:
      print("被监测代码块没有异常发生时会运行")
      finally:
      print("被监测代码块无论有没有异常发生都会运行")

      print("end...")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
try:
print("111")
l = [111,222,333]
# l[4]
# xxx
# 1/0
print("3333")
except IndexError as e:
print("IndexError===>",e)
except (NameError,KeyError) as e:
print("ameError,KeyError", e)
except Exception as e:
print("万能异常",e)
else:
print("else被监测代码块没有异常发生时会运行")
finally:
print("finally被监测代码块无论有没有异常发生都会运行")

print("end...")


### 主动抛出异常
raise TypeError("名字必须是str类型")

### 自定义异常
class StrError(BaseException):
def __init__(self,v):
self.v = v

def __str__(self):
return "<%s>" %self.v

raise StrError("名字必须是str类型")


l = [11,22,33]
# if len(l) != 3:
# raise TypeError("错误")


# 断言:判断语句是否有异常,如果有异常,则抛出异常
assert len(l) == 3
# 相当于以下代码:
if len(l) != 3:
raise TypeError("错误")