关于异常的一些问题

s1 = 'hello'
try:
    int(s1)
except IndexError as e:
     print(e)
except KeyError as e:
     print(e)
except ValueError as e: #异常最终被这里捕获
    print(e)   #invalid literal for int() with base 10: 'hello'


try :
    raise ValueError
except ValueError as e:
    print(e)  #什么也不打印

分析这两段代码,可以看出,同时打印print(e),上面的会出现打印内容而下面没有出现,原因是,主动抛出异常(包括主动抛出自定义的异常),直接打印 e,是没有效果的.

try :
raise ValueError
except ValueError as e:
  print(e)#空的
print(e.__traceback__.tb_frame) #<frame at 0x005B0C30, file 'F:/15期/8.24-8.31/练习.py', line 696, code <module>>
#可以打印红色字体部分,会出现更加具体的错误提示内容,当然,不是主动抛出异常更可以用这个红色字体内容了
还有一种方法
import traceback
try :
raise ValueError
except ValueError as e: #这是描述错误最具体的一种方法,适用于主动抛出异常.和非主动异常
print(traceback.format_exc()) #Traceback (most recent call last):
# File "F:/15期/8.24-8.31/练习.py", line 694, in <module>
# raise ValueError
# ValueError

还有一个知识点
try:
raise TypeError("类型错误") #只要是主动抛出异常,这里都可以加括号写东西,下面print(e)就是什么内容
except Exception as e:
print (e) #类型错误
 
下面讨论一下 自定义异常
****************************************************************
# class NotinError(Exception):    #必须继承Exception
# pass
#
# try:
# raise NotinError("类型错误") #这里写什么,下面的print(e)就会出现什么结果.如果什么都不写直接是NotinError
#下面就什么都不打印
# except NotinError as e:
# print(e) #类型错误
 
 
****************************************************************
 
 
import traceback
class NotinError(Exception): #必须继承Exception
pass

try:
raise NotinError("类型错误") #这里如不过写类型错误,下面打印就什么都没有
except NotinError as e:
print(e.__traceback__.tb_frame) #<frame at 0x001D0C30, file 'F:/15期/8.24-8.31/练习.py', line 743, code <module>>
print(traceback.format_exc()) #Traceback (most recent call last):
# File "F:/15期/8.24-8.31/练习.py", line 741, in <module>
# raise NotinError("类型错误") #这里如不过写类型错误,下面打印就什么都没有
# NotinError: 类型错误
********************************************************************
class EvaException(BaseException):
def __init__(self,msg): #这四行用一个pass代替掉照样原样输出
self.msg=msg
def __str__(self):
return self.msg,1

try:
raise EvaException('类型错误')
except EvaException as e:
print(e)

猜你喜欢

转载自www.cnblogs.com/lxx7/p/9579007.html