2020-12-20

7、自定义异常

7.1、自定义异常的两种方式

方式一

class MYERROR(Exception):

def init(self):
self.err = “自定义异常”

def str(self):
return self.err

e = MYERROR()
raise MYERROR

#方式二
class MYERROR2(BaseException):

def init(self,msg):
self.msg = msg
#继承BaseException类不再需要__str__方法,BaseException中已经实现了
try:
raise MYERROR2(“自定义异常”)
except Exception as e:
print("-----")
print(e)
7.2、如何手动抛出异常:raise

系统的自带的异常只要触发会自动抛出,比如NameError,但用户自定义的异常需要用户自己决定什么时候抛出。
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。大多数的异常的名字都以"Error"结尾,所以实际命名时尽量跟标准的异常命名一样。

#1.用户自定义异常类型
class TooLongExceptin(Exception):
“this is user’s Exception for check the length of name "
def init(self,leng):
self.leng = leng
def str(self):
print(“姓名长度是”+str(self.leng)+”,超过长度了")

#2.手动抛出用户自定义类型异常
def name_Test():
name = input(“enter your naem:”)
if len(name)>4:
raise TooLongExceptin(len(name)) #抛出异常很简单,使用raise即可,但是没有处理,即捕捉
else :
print(name)

#调用函数,执行
name_Test()
-----------------执行时满足条件后抛出一个用户定义的异常如下:--------------------------------------
enter your naem:是打发斯蒂芬
Traceback (most recent call last):
姓名长度是6,超过长度了
File “D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py”, line 21, in
name_Test()
main.TooLongExceptin: <exception str() failed>

7.3.捕捉用户手动抛出的异常

#1.捕捉用户手动抛出的异常,跟捕捉系统异常方式一样

def name_Test():
try:
name = input(“enter your naem:”)
if len(name) > 4:
raise TooLongExceptin(len(name))
else:
print(name)

except TooLongExceptin as e_result:  # 这里异常类型是用户自定义的
    print("捕捉到异常了")
    print("打印异常信息:", e_result)

调用函数,执行

name_Test()

=执行结果如下=
enter your naem:kklklk;l;l
捕捉到异常了
打印异常信息: 姓名长度是10,超过长度了
姓名长度是10,超过长度了
Traceback (most recent call last):
File “D:/self_study/python_study/class_study/异常.py”, line 15, in name_Test
raise TooLongExceptin(len(name))
main.TooLongExceptin: <exception str() failed>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “D:/self_study/python_study/class_study/异常.py”, line 24, in
name_Test()
File “D:/self_study/python_study/class_study/异常.py”, line 21, in name_Test
print(“打印异常信息:”, e_result)
TypeError: str returned non-string (type NoneType)

Process finished with exit code 1
8、什么时候使用异常

try…except应该尽量少用,因为给你的程序加了一种异常处理的逻辑,会导致代码可读性变差。

而且异常处理,只有在有些异常无法预知的情况下,才加上try…except,其他的逻辑错误应该尽量修正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值