127 lines
3.7 KiB
Plaintext
127 lines
3.7 KiB
Plaintext
=================================
|
||
HomeWork
|
||
Author: Flora Chen
|
||
-_- -_- -_- -_- -_- -_- -_- -_-
|
||
=================================
|
||
|
||
******异常******
|
||
|
||
1. 对于有可能会出错的代码, 我们可以对这行代码进行异常捕获。
|
||
try-except
|
||
try-except-else
|
||
try-except-else-finally
|
||
try-except-finally
|
||
|
||
示例:
|
||
try:
|
||
a = int(input('请输入一个数字:'))
|
||
except:
|
||
print('出错啦!(try里面的代码出现了异常执行except中的代码)')
|
||
else:
|
||
print('try里面的代码没有出现异常的时候执行else中的代码')
|
||
finally:
|
||
print('不管代码是否出现异常,都会执行!')
|
||
|
||
2. 捕获指定类型的异常
|
||
示例:
|
||
try:
|
||
a = int(input('请输入一个数字:'))
|
||
print(b)
|
||
except NameError: # 指定异常才会被捕获。出现其他异常还是会报错。
|
||
print('出错啦!(出现NameError会打印)')
|
||
|
||
3. 可以定义变量来接收异常
|
||
示例:
|
||
try:
|
||
a = int(input('请输入一个数字:'))
|
||
print(b)
|
||
except NameError as e:
|
||
print('当前出错的原因:', e) # 输出结果:name 'b' is not defined
|
||
print('出错啦!(出现NameError会打印)')
|
||
|
||
4. 捕获多个异常
|
||
示例:
|
||
# 方法一:使用多个except(不同的异常类型,可以做不同的处理)
|
||
try:
|
||
a = int(input('请输入一个数字:'))
|
||
print(b)
|
||
except NameError as e:
|
||
print('当前出错的原因:', e)
|
||
print('出错啦!(出现NameError会打印)')
|
||
except ValueError as e2:
|
||
print('当前出错的原因:', e2)
|
||
print('出错啦!(出现ValueError会打印)')
|
||
|
||
|
||
# 方式二:一个except(不同异常做相同处理)
|
||
try:
|
||
a = int(input('请输入一个数字:'))
|
||
print(b)
|
||
except (NameError, ValueError) as e:
|
||
print('当前出错的原因:', e)
|
||
print('出错啦!(出现NameError, ValueError会打印)')
|
||
|
||
# 注意:上述代码中,try的第一行代码出现异常,try中的第二行代码就不会执行了
|
||
|
||
5. 捕获不确定的异常, 可以直接捕获常见异常类型的父类
|
||
示例:
|
||
try:
|
||
import requests
|
||
requests.ger(url='www.baidu.com')
|
||
except Exception as e:
|
||
print('出错的原因:', e)
|
||
|
||
6. else场景应用
|
||
示例:
|
||
import os
|
||
# 复制指定路径下的文件到当前文件所在的目录
|
||
def file_copy(path):
|
||
try:
|
||
file_list = os.listdir(path)
|
||
except FileNotFoundError as e:
|
||
print('你传入的路径不对,出现了错误,错误提示{}'.format(e))
|
||
# 获取文件路径没有出错才执行以下代码
|
||
else:
|
||
for file in file_list:
|
||
# 定位目标目录的文件
|
||
file_path = os.path.join(path, file)
|
||
|
||
# 如果是文件,则进行文件复制
|
||
if os.path.isfile(file_path):
|
||
# 读取文件的内容
|
||
with open(file_path, 'rb') as f:
|
||
content = f.read()
|
||
|
||
# 将上面读取到的内容写入到新文件中, 新文件跟当前文件同级,并且命名带有cp
|
||
# with open(os.path.join(os.getcwd(), 'cp' + file), 'wb') as f:
|
||
with open('cp' + file, 'wb') as f:
|
||
f.write(content)
|
||
|
||
file_copy('path')
|
||
|
||
7. finally应用场景
|
||
示例:
|
||
# 通过finally来关闭文件
|
||
f = open('case.txt', 'w', encoding='utf-8')
|
||
try:
|
||
n= input('请输入数字:')
|
||
except:
|
||
f.write('代码错误了!')
|
||
else:
|
||
f.write('代码没有错误了!')
|
||
finally:
|
||
print('finally执行了!')
|
||
f.close()
|
||
|
||
8. raise:主动抛出异常
|
||
示例:
|
||
print('-----------------------')
|
||
# raise ValueError('这个自定的错误提示')
|
||
raise AssertionError
|
||
print('-----------------------')
|
||
|
||
9. assert断言
|
||
excepted = '用例执行通过'
|
||
result = '用例执行未通过'
|
||
assert excepted == result # 不相等,会抛出异常AssertionError
|