一、异常处理
1.最简单的try-except语句格式如下:
try:
#语句块
except:
#异常处理代码
try:
#语句块
except:
#异常处理代码
例
>>> try:
print('-----------------')
a = int(input('请输入一个数:'))
b = int(input('请在输入一个数:'))
print(a/b)
except ZeroDivisionError:
print('第二个数不能为0')
>>> try:
print('-----------------')
a = int(input('请输入一个数:'))
b = int(input('请在输入一个数:'))
print(a/b)
except ZeroDivisionError:
print('第二个数不能为0')
-----------------
请输入一个数:232
请在输入一个数:0
第二个数不能为0
2.捕获多个异常;捕获异常的描述信息(应用as)
try:
#语句块
except 异常名称1:
#异常处理代码
except 异常名称2:
#异常处理代码
异常名称可用元组表示
>>> try:
a = int(input('请输入一个数:'))
b = int(input('请在输入一个数:'))
print(a/b)
except (ZeroDivisionError,ValueError) as result:
print('捕捉到异常%s'%result)
>>> try:
a = int(input('请输入一个数:'))
b = int(input('请在输入一个数:'))
print(a/b)
except (ZeroDivisionError,ValueError) as result:
print('捕捉到异常%s'%result)
请输入一个数:b
捕捉到异常invalid literal for int() with base 10: 'b'
3.捕获所有的异常(Exception)
>>> try:
a = int(input('请输入一个数:'))
b = int(input('请在输入一个数:'))
print(a/b)
except Exception as result:
print('输入错误,错误类型:',result)
a = int(input('请输入一个数:'))
b = int(input('请在输入一个数:'))
print(a/b)
except Exception as result:
print('输入错误,错误类型:',result)
请输入一个数:23
请在输入一个数:0
输入错误,错误类型: division by zero
4.没有捕获到异常
try:
except:
else:
5.中止行为
在程序中,有一种情况是,无论是否捕捉到异常,都要执行一些中止行为,比如关闭文件,这时可用finally语句处理。
try:
f.open('sssdada','r')
xxxxx
finally:
f.close()
print('关闭文件')
二、抛出异常
1.raise语句
①使用类名引发异常
raise IndexError
②使用异常类的实例引发异常
index = IndexError()
raise index
index = IndexError()
raise index
③传递异常
不带任何参数的raise语句,可以再次引发刚刚发生过的异常,作用就是向外传递异常。
不带任何参数的raise语句,可以再次引发刚刚发生过的异常,作用就是向外传递异常。
例
>>> try:
raise IndexError
except:
print('出错了')
raise
>>> try:
raise IndexError
except:
print('出错了')
raise
出错了
Traceback (most recent call last):
File "<pyshell#8>", line 2, in <module>
raise IndexError
IndexError
>>>
Traceback (most recent call last):
File "<pyshell#8>", line 2, in <module>
raise IndexError
IndexError
>>>
④指定异常的描述信息
例
>>> raise IndexError('索引错误')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
raise IndexError('索引错误')
IndexError: 索引错误
>>>
>>> raise IndexError('索引错误')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
raise IndexError('索引错误')
IndexError: 索引错误
>>>
⑤异常引发异常
如果要在异常中抛出另外一个异常,可以使用raise-from语句实现。
如果要在异常中抛出另外一个异常,可以使用raise-from语句实现。
2.断言assert语句
assert语句又称作断言,指的是期望用户满足指定的条件。当用户定义的约束条件不满足的时候,它会触发AssertionError,所以assert语句可以当做条件式的raise语句。
assert语句又称作断言,指的是期望用户满足指定的条件。当用户定义的约束条件不满足的时候,它会触发AssertionError,所以assert语句可以当做条件式的raise语句。
格式:
assert 逻辑表达式,data #data是可选的
assert 逻辑表达式,data #data是可选的
在上述格式中,assert后紧跟一个逻辑表达式,相当于条件。data通常是一个字符串,当表达式的结果为False时,作为异常类型的描述信息使用。逻辑上等同于:
if not 逻辑表达式:
raise AssertError(data)
if not 逻辑表达式:
raise AssertError(data)
例
>>> a = 0
>>> assert a!=0,'a的值不能为零'
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
assert a!=0,'a的值不能为零'
AssertionError: a的值不能为零
>>>
assert语句用来收集用户定义的约束条件,而不是捕捉内在的程序设计错误。
三、自定义异常
WAITING FOR UPDATING···
四、预定义清理
上下文管理;with语句
上下文管理;with语句
语法格式:
with 上下文表达式 [as 资源对象]:
对象的操作
对象的操作
with open('foo.txt') as file:
data = file.read()
data = file.read()
上述实例使用with语句打开文件。如果能顺利打开文件,则将文件对象赋值给file,然后调用read方法读取了file对象的数据。当对文件操
例:读取文本
with open('123.txt') as f:
data = f.readlines()
for each_line in data:
print(each_line)