python 内存溢出能捕获吗,Python——写自己的异常(形成强大的捕捉和处理能力)...

"""

1、编写自己的异常时,通常是继承Exception

2、如果继承的是BaseException,那么就不会被通用的except Exception捕捉到

3、自己定义的异常Python不会自动触发,需要自己触发,用raise进行触发

4、python只会自动触发它自己本身内置的异常,如IndexEerror,NameError,IOError等,只要是Error结尾通常都是内置异常

"""

class MyException(Exception):

def __init__(self, msg): #msg参数用于接收自己触发异常时传进来的错误描述信息

self.msg = msg

def __str__(self): #格式化输出

return "[Internal Logic Error:] %s" % (self.msg)

#例子1:

# if __name__ == '__main__':

#     flag = False

#     try:

#         if flag:

#             print("Initialization data")

#             print("done...")

#         else:

#             raise MyException("no data") #触发自己的异常

#     except MyException as err: #捕捉被触发的自定义异常

#         print(err) #打印异常信息,如果有参数,那么可通过err.args打印参数

#例子2:在自定义的异常中能否捕捉内置异常呢?

# if __name__ == '__main__':

#     a = [1,2,3,4]

#     # print(a[10]) # 将这一句放在这里,则抛出IndexError: list index out of range,且程序停止运行

#     flag = False

#     try:

#         if flag:

#             print("Initialization data")

#             print("done...")

#             print(a[10]) #这里访问一个不正确的索引,似乎捕捉不到

#         else:

#             raise MyException("no data") #触发自己的异常

#     except MyException as err: #捕捉被触发的自定义异常

#         print(err) #打印异常信息,如果有参数,那么可通过err.args打印参数

#******************编写一个需要给定初始值的自定义异常类****************

class LoginExce(Exception):

def __init__(self, username, password):

super().__init__("your username:{name} and passwd:{pwd} is error".format(name=username, pwd=password))

self.user = username

self.pwd = password

def log(self):

print("登录异常记录到日志...")

log_err_info = ("u:%s p:%s login failed" % (self.user, self.pwd))

# if __name__ == '__main__':

#     auth = False #这标志位用于模拟登录的状态

#     try:

#         if auth:

#             print("登录成功...")

#         else:

#             raise LoginExce("toby", "1qaz@WSX") #如登录失败则引发异常

#     except LoginExce as err: #捕捉这个异常

#         err.log() #调用异常类的日志记录的方法

#         print(err) #打印异常信息

#

#     根据上面的测试得知,只有在引发了自定义的异常后,才能访问到异常的实例,名字叫err

#看下面两个函数,一个是用if,还有一个是通过捕捉异常

def func_a(num):

try:

print(100 / num)

except (ZeroDivisionError, TypeError):

print("value Value can not be illegal")

def func_b(num):

if num == 0:

print("value Value can not be 0")

return

if isinstance(num, str):

print("value Value can not be str")

return

else:

print(100 / num)

func_a(0)

func_b(0)

func_a("abc") #传入字符串

func_b("abc") #传入字符串

#那么,其实这两种方式可以结合使用,形成强大的捕捉和处理能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值