python中的异常捕获

异常捕获

1.什么是异常

  • 程序执行过程中出现错误,也叫出现异常

2.异常捕获

让本来会出现异常的位置,不出现异常,而是自己去处理异常出现的情况
情况1:捕获所有的异常

语法1:
try:
代码段
except:
代码段2

执行过程:
执行代码段1 ,如果代码段1出现异常,不会崩溃,而是马上执行代码段2.
如果代码段1没有异常,不会执行代码段2


try :
    print([1,2][3])
except:
    print('出现异常')
print('======')

情况2 捕获指定异常

a.语法
try:
代码段2
exceot:错误类型名
代码段2

  • 执行过程:执行代码段1,当代码段1出现指定类型的异常后,程序不崩溃,而是执行代码段2
try :
    print([1,2][3])
    print(int('abc'))#不执行
except IndexError:
    print('下标越界')
print('======')

情况3:同时捕获多个异常,同时处理,对不同的异常做出相同的反应

try:
代码段1
except(错误类型1,错误类型2,错误类型3,......):
代码段2
执行过程:执行代码段1,如果代码段1中出现了指定的异常,程序不会崩溃,会执行代码段2,

try :
    print([1,2][3])
    print(int('abc'))
except(ValueError,IndexError):
    print('出错啦')
print('======')

情况4:同时捕获多个异常,同时处理,对不同的异常做出不同的反应

try:
代码段1
except(错误类型1):
代码段2
except(错误类型2):
代码段3
except(...) :
..........

  • 执行过程:执行代码段1,如果代码段1中出现了指定的异常,程序不会崩溃,会执行代码段2,
try :
    # print([1,2][3])
    print(int('abc'))
except(IndexError):
    print('值错误')
except(ValueError):
    print('下标错了')
print('======')

3.finally

try:
代码段1
except(错误类型1,错误类型2,错误类型3,......):
代码段2
finally:
代码段3

  • 不管代码段1是否出现异常,也不管异常是否能捕获,finally后面的代码段3都会执行
# try :
#     # print([1,2][3])
#     print(int('abc'))
# except(IndexError):
#     print('值错误')
# finally:
#     print('抢救失败')


  • 什么时候使用异常捕获
    明明知道某段代码可能会出现异常,但又没有办法避免,就使用异常捕获
#统计学生成绩,知道输入的结果是’end‘   求和
# while True:
#     try:
#         score = int(input('输入成绩:'))
#     except ValueError:
#         print('输入有误,请输入数字')
#         score = int(input('输入成绩:'))
#     finally:
#         sum()


#封装一个函数,功能是获取指定文件中的内容(普通文件)
def get_value(file):
    try:
        with open(file,'r',encoding='utf-8') as f:
            content = f.read()
            return content
    except FileNotFoundError:
        print('文件路径错误')
        return ''
get_value('ceshi.txt')

抛出异常

抛出异常:主动让程序崩溃
语法:
raise 错误类型 - 程序执行到raise的时候直接抛出异常

注意:错误类型必须是一个类,并且这个类是Exception的子类


#输入年龄,如果输入的年龄的范围不在0-100,程序就崩溃
num = int(input('年龄'))
if num > 100 or num < 0:
    raise ValueError

你可能感兴趣的:(python中的异常捕获)