1.常见异常
'''AssertionError:断言语句失败。当assert这个关键字后面的条件为False时,
程序将停止并抛出AssertionError异常。assert语句一般是在测试程序的时候用
于在代码中置入检查点'''
>>> a = ['lzm']
>>> assert len(a) > 0
>>> ()
'lzm'
>>> assert len(a) > 0
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
assert len(a) > 0
AssertionError
'''AttributeError:尝试访问未知的对象属性。当试图访问的对象属性不存在时
抛出AttributeError异常'''
>>> a = []
>>> ()
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
()
AttributeError: 'list' object has no attribute 'lzm'
'''IndexError:索引超出序列的范围'''
>>> a = [1, 1, 1]
>>> a[3]
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
a[3]
IndexError: list index out of range
'''KeyError:字典中查找一个不存在的关键字。建议使用()方法'''
>>> a = {'a':1, 'b':2, 'c':3}
>>> a['a']
1
>>> a['d']
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
a['d']
KeyError: 'd'
'''NameError:尝试访问一个不存在的变量'''
>>> b
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
b
NameError: name 'b' is not defined
'''OSError:操作系统产生的异常。FileNotFoundError是OSError的子类'''
>>> f = open('qqqq')
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
f = open('qqqq')
FileNotFoundError: [Errno 2] No such file or directory: 'qqqq'
'''SyntaxError:Python的语法错误'''
>>> print'acs'
SyntaxError: invalid syntax
'''TypeError:不同类型间的无效操作,例如类型不同的对象是不能相互进行计算的'''
>>> 1+'1'
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
1+'1'
TypeError: unsupported operand type(s) for +: 'int' and 'str'
'''ZeroDivisionError:除数为零'''
>>> 1 / 0
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
1 / 0
ZeroDivisionError: division by zero
异常捕获可以使用try语句实现,任何出现在try语句范围内的异常都会被即使捕获到。
-except
try:
检测范围
except Exception[as reason]:
出现异常(Exception)后的处理代码
# 举个栗子
f = open('并不存在.txt')
print(())
()
>>>
Traceback (most recent call last):
File "C:\Users\威震东南亚\Desktop\PY\", line 1, in <module>
f = open('并不存在.txt')
FileNotFoundError: [Errno 2] No such file or directory: '并不存在.txt'
# 修改后
try:
f = open('并不存在.txt')
print(())
()
except OSError:
print('文件打开过程中出错')
>>>
文件打开过程中出错
# 使用as把错误的具体内容打印出来
try:
f = open('并不存在.txt')
print(())
()
except OSError as reason:
print('文件出错\n具体原因是:' + str(reason))
>>>
文件出错
具体原因是:[Errno 2] No such file or directory: '并不存在.txt'
#针对不同异常设置多个except
try:
a = 1 + '1'
f = open('并不存在.txt')
print(())
()
except OSError as reason:
print('文件出错\n具体原因是:' + str(reason))
except TypeError as reason:
print('类型出错\n具体原因是:' + str(reason))
>>>
类型出错
具体原因是:unsupported operand type(s) for +: 'int' and 'str'
# 对多个异常统一处理
try:
a = 1 + '1'
f = open('并不存在.txt')
print(())
()
except (OSError, TypeError) as reason:
print('出错了\n具体原因是:' + str(reason))
>>>
出错了
具体原因是:unsupported operand type(s) for +: 'int' and 'str'
# 捕获所有异常
try:
a = 1 + '1'
f = open('并不存在.txt')
print(())
()
except:
print('出错了')
>>>
出错了
'''NOTE:try语句检测范围内一旦出现异常,剩下的语句将不会被执行'''
-finally语句
try:
f = open('') #真实存在的文件
print(())
a = 1+'1' #出现异常,程序直接跳转执行except语句
()
except:
print('ERROR!')
>>>
cute
ERROR!
'''事实上()并没有被执行,所以为了实现这种即使出现异常
也不得不执行的收尾工作,引入finally'''
try:
f = open('') #真实存在的文件
print(())
a = 1+'1'
except:
print('ERROR!')
finally:
()
'''finally语句无论如何都会执行'''
语句
'''可以使用raise语句让程序自己抛出一个异常'''
>>> raise ZeroDivisionError
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
raise ZeroDivisionError
ZeroDivisionError
'''抛出的异常还可以带参数,表示异常的解释'''
>>> raise ZeroDivisionError('除数不能为0')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
raise ZeroDivisionError('除数不能为0')
ZeroDivisionError: 除数不能为0
5.丰富的else语句
'''如果try语句里没有出现任何异常,就会执行else语句'''
try:
int('abc')
except ValueError as reason:
print('出错:'+str(reason))
else:
print('NO ERROR')
>>>
出错:invalid literal for int() with base 10: 'abc'
6.简洁的with语句
try:
f = open('', 'w')
for i in f:
print(i)
except OSError as reason:
print('出错:'+str(reason))
finally:
()
'''对文件操作使用with语句,将大大较少代码量,而且再也不用担心出现
文件打开了忘记关闭的问题,with会自动帮助关闭文件'''
try:
with open('', 'w') as f:
for i in f:
print(i)
except OSError as reason:
print('出错:'+str(reason))