异常处理
什么是异常
什么是错误 程序真正运行前
有解释器发现的一般为语法错误 异常一般由逻辑引发
异常处理使用 try 语句实现
格式:
try:
#程序代码段
except 异常类型:
异常处理代码
…except 可以有多条语句,分别处理不同的异常
[
else:
没有异常时的操作
finally:
清理动作
]
except 之后不跟任何异常类型时,将捕获任意异常(其等价于捕获BaseException、Exception)
在python中所有的异常类型都是Exception的后代类
因此在我们使用异常类型时捕获范围较小的异常类需要放置在前面
如果异常没有被当前的except捕获,则向上一级的try语句抛出,直至被某一个try语句处理为止。若一直没有try语句处理则抛出
例如:
try:
try:
num = input('请输入两个数字,使用空格隔开')
num = num.split(' ')
num = [x for x in num if x]
for i in range(len(num)):
num[i] = float(num[i])
num1 = input('请输入一个数字:')
num.append(num1)
print(sum(num))
except ValueError:
print('您输入的不是数字')
else:
print('ELSE')
finally:
print('inner end')
except TypeError:
print('您输入的有误')
print('Process End')
**
自定义异常
**
定义一个继承于 Exception 的自定义异常类
我们可以通过raise语句手动抛出一个异常
except 子句中如果需要异常实例的内容 则在python3中 使用《异常类型 as e》我们就可以在自语句段中通过变量e获得捕获的异常实例。
在2中的语法为 《异常类型,e》
#inally 清理动作一般用于 文件的关闭,数据的关闭等操作。
class MyError(Exception):
"""docstring for MyError"""
def __init__(self, arg):
Exception.__init__(ValueError(int))
self.arg = arg
try:
name = input('请输入一个用户名:')
if len(name)< 8:
raise MyError('您的用户名长度不足八位')
except MyError as e:
print('e.arg')
扩展:文件基本操作
打开:f = open(path,module,[encoding])
module 常用值为 r 读 , w 写 , a 追加 ,b 二进制 , r+ 读写, w+写读
读取内容:data = f.read() #全部读取(文件的内容如果不操作游标则仅能读取一次)
关闭: f.close()
示例代码:
try:
'''
各种操作
'''
f = False
f = open('file')
'''
各种操作
'''
except:
pass
finally:
if f:
f.close()
日志模块使用
import logging
日志级别 NOTES<DEBUG<INFO<WARNING<ERROR<CRITICAL
logging.basicConfig(level=logging.DEBUG
logging.error(‘这是一个日志信息’)
logging.info(‘这是一个info信息’)
logging.debug(‘这是一个debug信息’)
try:
try:
num = input('请输入两个数字,使用空格隔开')
num = num.split(' ')
num = [x for x in num if x]
for i in range(len(num)):
num[i] = float(num[i])
num1 = input('请输入一个数字:')
num.append(num1)
print(sum(num))
except ValueError:
print('您输入的不是数字')
else:
print('ELSE')
finally:
print('inner end')
except TypeError:
print('您输入的有误')
print('Process End')