python入门19 异常及异常处理 异常捕获

 

常见异常举例

""" 一些异常举例:"""

'''模块不存在 ModuleNotFoundError: No module named 'data' '''
#import data1
'''索引越界 IndexError: list index out of range '''
li = [1,2]
#li[3]
'''key不存在 KeyError: 'a' '''
dict1 = {}
#dict1['a']
''' NameError: name 'a' is not defined '''
#a #未定义的变量
'''缩进错误 IndentationError: expected an indented block '''
# if 1:
# return True #缩进错误
'''语法错误 SyntaxError: invalid syntax '''
#def fund x: return x
''' 类型错误 TypeError: can only concatenate str (not "int") to str '''
#'a' + 2
''' 除数为0  ZeroDivisionError: division by zero'''
#2/0
''' 递归错误 未设置跳出条件 RecursionError: maximum recursion depth exceeded '''
# def f(x):
#     return f(x)
# f(1)

 

异常捕获 try except finally

"""异常捕获 
try(可能发生异常的语句) 
except(发生异常后处理)
else(没有发生异常后执行的语句) 
finally(不管有无异常都要继续执行的语句)
不捕获,发生异常后后程序会中断执行。捕获异常,可根据异常进行处理
"""
#捕获一种特定异常
try:
    x = 10/0
    print('x=',x) #异常后的不执行
except ZeroDivisionError:
    print('除数不能为零') #发生异常后执行的部分
else:
    print('没有除数异常') #没有发生异常后执行
finally:
    x = 0
    print('finally')  #不管有无异常均一定会执行的部分

 

#捕获多种异常
try:
    a
    x = 10/0
except (ZeroDivisionError,NameError):
    print('出错了') #发生异常后执行的部分

 

#捕获任何类型的异常
import traceback
try:
    x = 10/0
    a
except BaseException as e:
    print(e) #仅显示异常信息
    traceback.print_exc() #显示错误所在详细的堆栈信息
print('后续程序继续执行')

 

抛出异常raise 

"""抛出异常 raise 错误类型(错误信息)"""
name = 'abc'
if len(name) <= 6:
    raise ValueError('username必须大于6个字符')
else:
    print('ok')

 

自定义异常

"""自定义异常类,继承自已有异常类"""
class userError(BaseException):
    pass

name = 'abc'
if name != 'abcd':
    raise userError('user error')

 

the end!

 

posted @ 2018-11-18 22:43  dinghanhua  阅读(428)  评论(0编辑  收藏  举报