11、try异常处理
11.1 简写模式
a = 2
b = 0
try :
print ( a / b)
except Exception as e:
print ( '出现错误' )
print ( e)
print ( 'hello world!' )
展示:
出现错误
division by zero
hello world!
注意点:
1 、我们将可能出现问题的语句,放在try 这个分支下面
2 、如果try 分支下的语句发生错误,进入到except 分支下面进行处理
3 、try 如果语句发生问题,当前语句之后的语句不再执行
11.2 完整模式
try :
print ( 1 / 0 )
except :
print ( 'except' )
else :
print ( 'else' )
finally :
print ( 'finally' )
print ( '##########' )
try :
print ( 1 / 1 )
except :
print ( 'except' )
else :
print ( 'else' )
finally :
print ( 'finally' )
展示:
except
finally
1.0
else
finally
注意点:
1 、finally 不管语句是否正确,将来一定要走的,可以在当前分支做一些统一的操作:例如关闭文件、关闭链接
2 、else :当语句能够正常执行的时候,走else 这个分支
11.3 自定义异常与使用
class LenTypeException ( Exception) :
def __init__ ( self) :
self. errmsg = '长度不符合规范,必须要传入指定类型'
def __str__ ( self) :
return self. errmsg
def printinfo ( name, age) :
if len ( name) < 2 or type ( name) != str :
raise LenTypeException
if type ( age) != int :
raise LenTypeException
try :
printinfo( '小王' , '18' )
except LenTypeException as e:
print ( e)
展示:
长度不符合规范,必须要传入指定类型
11.4 异常的传递
try :
try :
printinfo( '小王' , '18' )
except ( NameError) as e:
print ( '这是内部的异常捕获' )
print ( e)
except LenTypeException as e:
print ( '这是外部的异常捕获' )
print ( e)
展示:
这是外部的异常捕获
长度不符合规范,必须要传入指定类型
注意点:
异常处理可以进行传递,如果自身的异常不能被捕获,就会向外层try 进行传递,如果最外层的异常也不能处理的话,就报错
12、传包
import random
random. randint( )
from random import randint, randrange
randint( )
from random import *
randint( )