如果要明确的触发异常,可以通过raise语句。
raise语句的格式为:
raise class #make and raise instance of class:makes an instance
raise instance #最常用的情况,等价于 raise class()
raise #如果你需要捕获并处理异常但不希望异常在代码中死亡,通常会使用
#raise class
try:
raise IndexError
except IndexError:
print(" got exception")
#raise instance
class AlreadyGotOne(Exception):
pass
def grail():
raise AlreadyGotOne() #raise an instance
try:
grail()
except AlreadyGotOne: #catch class name
print("got exception")
#raise
try:
raise IndexError("spam")
except IndexError:
print("propagating")
raise
重要!!!
异常一旦被捕获就会立刻死亡,除非他被另一个raise语句或错误引发
#关于raise的关键#
它可以自动引发异常!!!!
#raise...from...#
异常有时候会在回应其他异常时被触发,为了自发的实现异常链。python支持:
raise newexception from oldexception
- 初步了解:当raise中明确使用from时,from后面的表达式指定另一个异常类或实例,以附加到引发的新异常的__cause__属性
try:
1/0
except Exception as E:
raise TypeError("Bad") from E
- 拓展:不通过raise...from...也可以实现异常链
try:
1/0
except:
badname
- 避免链性异常的方法:raise newexception from None