码迷,mamicode.com
首页 > 编程语言 > 详细

十、python异常处理

时间:2020-09-17 19:58:11      阅读:32      评论:0      收藏:0      [点我收藏+]

标签:error:   级别   停止   完成   form   pyrhon   需要   事先   不同   

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

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

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

一、语法

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:
    ldljsdjlgkhkhkh
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))

 

十、python异常处理

标签:error:   级别   停止   完成   form   pyrhon   需要   事先   不同   

原文地址:https://www.cnblogs.com/zhangjx2457/p/13634469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!