自从学会异常处理,麻麻再也不用担心我找不到BUG了呢?
众所周知,python是世界上入门最简单的语言!?——周某人
声明
今天的内容比较少,但绝对不是水贴,水贴我这辈子养不起猫?
相关概念
- 错误:程序运行之前的语法问题,如:关键字出错、缩进不齐、括号不成对等
- 异常:程序运行过程中出现的问题,如:除数为0,对象属性不存在,字典的键不存在,下标越界
异常处理
-
说明:异常处理可以理解为特殊的流程控制语句,可以提高代码的健壮性
-
语法:
try: print('正常代码') a = 3 / 0 print('执行结束') except Exception as e: # 捕获异常,可以做出异常处理 print('出现异常', e) print('OVER')
多异常处理
# try:
# # print(a)
# # a = 3/0
# d = {}
# print(d['name'])
# except NameError as e:
# print('NameError:', e)
# except ZeroDivisionError as e:
# print('ZeroDivisionError:', e)
# except Exception as e:
# print('Othre error:', e)
try:
# print(a)
# a = 3 / 0
d = [1, 2, 3]
print(d[4])
except (NameError, ZeroDivisionError) as e:
# 将某些异常放在一起进行统一处理
print('name or zero:', e)
except Exception as e:
print('其他异常')
多异常处理完整写法:
try:
print('正常代码')
print(a)
except Exception as e:
print('出现异常', e)
else:
# 没有异常时会执行
print('正常结束')
finally:
# 无论有无异常都会执行
print('最后执行')
print('OVER')
手动抛出异常
try:
print('正常执行')
# 根据业务逻辑分析,手动抛出异常
raise Exception('手动抛出的异常')
print('执行结束')
except Exception as e:
print('出现异常:', e)
print('OVER')
异常嵌套
print('我要去上班,什么事也阻止不了我上班的脚步')
try:
print('我准备骑电动车去上班')
raise Exception('不知道那个缺德的家伙把我充电器拔掉了')
print('骑电动车提前到达公司')
except Exception as e:
print('电车异常:', e)
try:
print('我准备坐公交去上班')
raise Exception('等了20分钟没有公交车,果断放弃')
print('乘坐公交准时到达公司')
except Exception as e:
print('公交异常:', e)
print('我准备打车去公司')
print('打车还是快,还是能够提前到达公司')
print('热情饱满的开始一天的工作')
自定义异常类:
# 自定义异常类
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return 'MyException:' + self.msg
# 异常处理函数
def deal(self):
print('按照特定的方案处理异常')
try:
print('正常运行')
raise MyException('自定义异常')
except MyException as e:
print(e)
# 特定的处理方案
e.deal()
except Exception as e:
print('Exception', e)
print('OVER')
特殊场景
-
当进行文件操作时,无论过程是否出现异常,最后一定要关闭文件
-
使用with语句,保证文件关闭,无论中间是否出现异常
-
示例:
fp = open('xx.txt', 'r') content = fp.read(1024) print(content) # ... # 最后一定要关闭文件 fp.close() with open('00-text.txt', 'r') as fp: content = fp.read(1024) # ... # 结束时不需要考虑文件的关闭问题 # 无论中间是否出现了异常,一定会确保文件关闭
总结
本篇内容不大多,在初学阶段异常处理也不常用到,在不接触链接数据库等情况,一般的报错是可以直接找出问题并且快速解决的,这一篇大概了解一下什么是异常以及如何处理异常即可。
下期预告:下一期简单介绍正则表达式,正则表达式作为爬虫入门的基础可是相当重要的呢
Tips:如有疑问欢迎随时打扰 ???