关于异常捕获

image

4.2 异常捕获

  1. 什么是异常??
    代码运行出错,会导致异常,异常发生后,如果没有解决方法,则会导致整个程序结束。

  2. 异常的三个重要组成部分:

    1. 异常的追踪信息traceback
      翻到错误的最下面,从下往上第一个蓝色字体鼠标左键点击,即可跳转到错误代码所在行。
    2. 异常的类型
      xxxxError
    3. 异常的原因
      异常的类型冒号后面的内容。
      错误的详细原因很重要。
      看完之后可能找到解决的方法。
  3. 错误的种类

    1. 语法错误
      不被允许的,出现了就立刻修改!!
    2. 逻辑错误
      可以被允许,出现之后尽快修改即可
      修改逻辑错误的过程,其实就是在从头到尾清理思路的过程。
      NameError
      IndexError
      KeyError
      ValueError
      ...等等

image

  1. 捕获异常的基本语法结构
try:
	有可能出现错误的代码
except 错误类型 as e:
	出错之后对应的处理机制(e是错误的详细信息)
except 错误类型 as e:
	出错之后对应的处理机制
except 错误类型 as e:
	出错之后对应的处理机制


try:
	print(name)
except NameError as e:
	print('变量名不存在', e)
	# as e 可加可不加,看自己需求。
# 变量名不存在 name 'name' is not defined


# 在我们不知道可能出现的错误类型的时候
# 有万能异常
try:
	int('abc')
except Exception:  # BaseException
	print('啥错都能解决。。。')

"""
异常捕获句式和万能异常
	1.有可能会出现错误的代码才需要被监测
	2.被监测的代码一定要越少越好
	3.异常捕获使用频率越低越好
	爬虫程序中会经常用到。
"""

# 下面我们来解决上面的问题
l1 = [1,2,3,4,5,6,7,8,9,10,11,22,33,44,55,66]
# 循环打印出列表中每个元素,但是不能使用for循环

# 1.先将列表转为迭代器对象
res = l1.__iter__()

while True:
	try:
		print(next(res))
	except StopIteration:
		print('打印完毕')
		break

  1. 异常捕获补充
    else & finally用法

    try:
    	l = []
    	l[10]
    except NameError as e:
    	print('名字错误')
    except KeyError as e:
    	print('键错误')
    except IndexError as e:
    	print('索引错误')
    else:
    	print('当被监测代码没报错,正常运行结束之后会走这里')
    finally:
    	print('无论被监测代码报错与否,最终都要走这里')
    
    try:
    	被监测代码
    except 错误类型 as e:
    	...
    	...
    else:
    	被监测代码不报错的时候执行
    finally:
    	无论是否报错最终都会执行这里
    

    断言语句(用的很少,了解一下)

    name = 'jason'
    assert isinstance((name), int)
    # AssertionError
    

    主动报异常

    # 在监测机制中用到
    raise NameError
    
posted @ 2021-11-22 15:34  Joshua_jiaxue  阅读(86)  评论(0)    收藏  举报