一、exception
(鱼C)python标准异常总结
http://bbs.fishc.com/thread-45814-1-1.html
常谈到的:AssertionError、AttributeError、IndexError(序列中索引值超出实际范围)、KeyError(在字典中查找一个不存在的关键字,用捕获或者get()方法)、NameError(尝试访问不存在的变量)、OSError(操作系统的异常,下边有好多子类FileNotFoundError)、OverflowError、SyntaxError(语法错误)、TypeError(类型异常)、ZeroDivisionError(除数为0异常)
二、检测异常并处理
异常检测可以使用try,有两种形式
try-except语句
try:
检测范围
except Exception[as reason]:
出现异常(Exception)后的处理代码
try:
f = open('wobushiwenjian.txt')
print(f.read())
f.close()
except OSError:
print('文件出错了') #这种会打印“文件出错了”,但不会打印为什么出错
或者使用as
except OSError as reason:
print('文件出错了:' + str(reason)) #注意这里使用str!返回:文件出错了: Errno 2] No such file or directory: 'ss'
可以使用多个except
1 file_name = input('please filename for open:')
2 try:
3 sum = 1 + '1'
4 f = open(file_name)
5 print(f.read())
6 f.close()
7 except OSError as reason:
8 print('文件出错了\n错误原因是:' + str(reason))
9 except TypeError as reason:
10 print('类型出错了' + str(reason)
上栗中当有OSError、TypeError之外的异常时,不能被捕获,照样会挂掉;所以直接使用
except:
print('出错了')
写法会捕获 所有异常,也会捕获到ctrl + c强制关闭程序 (KeyboardError),因此不推荐这么做
注意:try里边的语句前边的语句出现了异常,后边的语句不会被执行
还可以这样写
except (OSError, TypeError):
print('出错了')
这种情况可以加as reason吗?不知道哎,自己去测一下!
try-finally语句
try:
检测范围
except Exception[as reason]:
出现异常(Exception)后的处理代码
finally:
无论如何都会被执行的代码
如果文件异常出现在文件成功打开之后,关闭文件之前,是有问题的!此时就需要把f.close()放到finally中!
raise语句
代码自己引发出一个异常!
用法:raise ZeroDivisionError('除数为零了')
>>> raise
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: No active exception to reraise
>>> 1 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> raise ZeroDivisionError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError
>>> raise ZeroDivisionError('除数为零了')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: 除数为零了
>>>