十、python异常处理

时间:2020-09-17 19:58:11   收藏:0   阅读:32

异常:程序出现了意想不到的情况

如果异常不解决,程序会崩溃,停止运行

捕获异常,如果出现了异常,我们会让他们按照事先规定的规则去执行对应的操作(记录操作日志)

一、语法

try (要运行的有可能发生异常的代码):

            代码

except (异常):

            出现异常的时候要运行的代码(执行的操作),记录日志

# 一旦try当中的代码报错,会立即跳到except,下面的代码不会继续执行

str_1 = [‘python‘] try: print(str_1 [8])    print("是否会执行?") except: print(‘记录错误日志‘) print("代码完成") ‘‘‘ 结果: 记录错误日志 代码完成 ‘‘‘
# 如果try里面的代码没有出现异常,就不会执行except

str_1 = [‘python‘]
try:
    print(str_1 [1])
   print("是否会执行?")
except: 
    print(‘记录错误日志‘) 
print("代码完成") 

‘‘‘ 
结果: 
y
是否会执行?
代码完成 
‘‘‘

好的程序员:知道什么代码需要放到try里面

a=4
b=1
print(a*b)   #需不需要加异常处理?

a=‘a‘
b=‘b‘
print(a*b)   #如果事先不知道传入的是什么类型,则需要加异常处理

try:
    print(a*b)
except:
    print(‘参数错误,记录日志‘)

try里面的语句调换顺序,报的错误就会不一样

同一个try不可能捕获两个异常的,如果遇到一个异常就直接执行except语句了

 

二、异常捕获的进阶版

指明出现的异常类型(先不要加异常,让他报错,将报错的类型记住,去异常捕获的时候,加入except语句中)

lst=[‘zjx‘]
try:
    print(4/0)
    lst[3]
except IndexError as e:
    print(‘出现异常:{}‘.format(e))
except ZeroDivisionError as e:
    print(‘出现除法错误:{}‘.format(e))
finally:
    #不管有没有报错,finally都会执行的
    print(‘hello world‘)

 

三、raise

手动抛出异常,让程序报错

def join_team(age,gender):
    if age > 22:
        raise ValueError(‘年龄要小于22‘)
    print(‘可以加入team‘)

print(join_team(23,‘girl‘))

‘‘‘
结果:
ValueError: 年龄要小于22
‘‘‘

 

四、常见的异常类型:

ImportError:无法引入模块或包

IndexError:下标索引超出序列边界

NameError:使用一个还未赋予对象的变量

SynataxError:代码逻辑语法出错,不能执行,不能去捕获

TypeError:传入的对象类型与要求不符

ValueError:传入一个不被期望的值,即使类型正确

KeyError:试图访问你字典里不存在的键

IOError:输入输出异常,文件操作

1)SyntaxError:语法错误

try:
    ldljsdjlg‘khkhkh‘
except:
    print(‘语法错误‘)

#结果显示错误,不能捕获异常
‘‘‘
    ldljsdjlg‘khkhkh‘
                    ^
SyntaxError: invalid syntax
‘‘‘

2)KeyError

dict1 = {‘1‘:‘zjx‘,‘2‘:‘hauhau‘}
print(dict1[‘3‘])

‘‘‘    print(dict1[‘3‘])
KeyError: ‘3‘
‘‘‘

3)IndexError

lst1 = [1,2,3,4,5]
print(lst1[5])

‘‘‘    print(lst1[5])
IndexError: list index out of range
‘‘‘

 

五、异常分组

发现了一个严重级别,阻塞级别的bug(短信通知相关人员赶紧集合的代码),一个轻微级别的bug(记录日志的代码)
针对不同的组进行不同的操作

try:
    1 / 0
    [‘hello‘][3]
    {‘name‘:‘pyrhon‘}[‘age‘]
except (IndexError,KeyError) as  e:
    ‘短信通知这里出现很严重的问题‘
    print(‘可以捕获IndexError和KeyError‘)
except ZeroDivisionError as e:
    ‘记录日志‘
    print(‘除法出现异常{}‘.format(e))

 

评论(0)
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!