第十二课,异常

第十二课 异常 讲课老师:风陨老师

2021/4/19

一,错误与异常

​ 错误:是指代码不符合解释器或者编译器的语法

​ 异常:是指错误引起异常

注:常见的异常,Exception:普通异常

        1、AttributeError:属性错误,特性引用和赋值失败时会引发属性错误

​		2、NameError:试图访问的变量名不存在

​		3、SyntaxError:语法错误,代码形式错误

​		4、KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误

​		5、IndexError:索引错误,使用的索引不存在,常索引超出序列范围,什么是索引

​		6、TypeError:类型错误,内建操作或是函数应于在了错误类型的对象时会引发类型错误

​		7、ValueError:值错误,传给对象的参数类型不正确,像是给int()函数传入了字符串数据类型的参数

1、异常:

  列:
       print(name)
       
       错误:NameError 试图访问的变量名不存在
       
    	os.path
    	错误:NameError 未导包也会导致NameError错误
 
 #注意:异常本身属于类  错误类型可以用help查看具体的分布结构及本质
 	   使用方法如:help('str')
       

2、异常结构 异常分为四大类:

(1)、SystemExit:python 退出异常
(2)、KeyboardInterrupt:键盘打断
(3)、GeneratorExit:    生成器退出
(4)、Exception:       普通异常  #重点

#重点:python的异常结构都是继承于BaseException

3、错误回溯

列: fori in in:
    	print(i)

 #返回错误位置-详细路径,第几行,哪里措错,以及错误类型.左单击返回路径,直接跳到错误行      
File "C:/Users/Administrator/PycharmProjects/untitled/namelianxiti/File-1.py", line 45
  for i in in:
            ^
SyntaxError: invalid syntax
    
 

注:通过回溯,准确找到错误位置,因为什么错误引起的。以及错误类型,从而解决问题。
 
   

4、异常处理

(1)、基本语法:

try:
   #可能会错误的代码

except:

   # 捕捉到异常的处理方案


(2)、捕获未知异常
try:	#可能会错误的代码
	print(name)
except Exception as a:  #在未知具体的错误类型时用Exception
	#异常处理逻辑
	print(e)			 
	
返回:name 'name' is not defined(名称“名称”未定义)


(3)、捕获具体异常

tryprint(name)
except NameError(已知异常类型)as b:#已知错误时用已知的异常类型
   	 
    print(b)
返回:name 'name' is not defined(名称“名称”未定义)



(4)、捕获多种异常

try:
    print(name)

except(NameError,ValueError,KeyError) as c: #可以使用多个已知异常类型,如果都不存在就报错,此时可换未知类型异常捕获方式
    	print(c)
    
返回:name 'name' is not defined(名称“名称”未定义)


小知识:
1、代码中会出现的异常都是Exception的子类

2、在捕获异常过程中,会从上到下依次对比异常,找到之后就不会再往后查找

5、进阶异常处理

try:					  # 预测可能会出错代码
    print(name)           # 会出错的代码
except Exception as a:
    print(a)              # 捕捉到异常的处理方案


else:	
    print('未发生异常')     # 没有异常执行

finally:                  # 不管是否出现错误都会执行
    print('硬核通过')
    
异常时返回:name 'name' is not defined(名称“名称”未定义)
          硬核通过	(#不管是否出现错误都会执行)

    

try:                      # 预测可能会出错的代码
    print('name')         # 会出错的代码
except Exception as a:
    print(a)              # 捕捉到异常的处理方案


else:
    print('未发生异常')     # 没有异常执行

finally:                  # 不管是否出现错误都会执行
    print('硬核通过')
              
没有异常时返回:name		 # 正常执行		
			 未发生异常	   # 没有异常时执行
		     硬核通过       # 不管是否出现错误都会执行

二、主动抛出异常 raise

try:
    numbers = input('请输一个数:\n')

    if not numbers.isdigit():		#判断输入的数不是整数就会被执行
    
        raise Exception('提示:输入的数必须为正整数')

except Exception as a:				#捕获异常
    print(a)						

    
    
    
自定义异常:


def func():							            # 自定义函数
    passwords = input('请输入六位数银行卡密码:\n')
    if len(passwords) == 6:						# 设置盘条件

        print('登录成功')						 # 条件符合执行
    else:
        raise Exception('密码不符合规定')		   # 条件不符合时执行


while True:
    try:
        func()
    except Exception as a:

        print(a)

        
        
        
        
class MyError(Exception):

    print('错误')


def func(name):
    if name == 'moran':
        print('帅')
    else:
        raise MyError('你不帅')

try:
    func('s')
except MyError as e:
    print(e)

三、断言 assert 在捕获异常基础增加 assert条件筛选,不满足条件市

try:
    b = 4

    assert b >= 5, '不满足条件'  #满足条件时,不执行
    						   #不满足条件时,执行 报错 AssertionError
except Exception as a:
    print(a)
    

b = 4

assert b >= 5


可以设置多个断言条件
try:
    b = 4
    assert b < 100 '不满足条件'	# 不满足条件时,执行
    assert b >= 5, '不满足条件'  # 满足条件时,不执行
    						   # 不满足条件时,执行 报错 AssertionError
except Exception as a:
    print(a)
          
          
          
          

# 断点 :通过选区运行Debug,观察每一步骤的具体情况,更清楚了解到bug的详情,从而解决问题
#用法:1、首先在代码行号显示区域右击鼠标 勾选,show line Numbers 
	 #2、代码行显示区左单击你想要执行Debug的区域,选中后有红点即操作完成
     #3、在代码区,右击鼠标运行Debug
     #4、在控制台区域就会显示每一个步骤的详细轨迹 点击 step into My Code 执行下一步

你可能感兴趣的:(异常,python)