Python 基础之异常

本文详细介绍了Python中的异常处理机制,包括异常的概念、如何通过raise语句抛出自定义异常、如何使用try/except结构来捕获并处理异常。此外,还探讨了如何利用多个except子句处理不同类型的异常,以及如何在异常处理中使用else和finally子句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

异常

什么是异常

Python 用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象并未被处理或者捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

>>> 1/0
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    1/0
ZeroDivisionError: division by zero

事实上每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多种方法进行捕捉,是的程序可以捉住错误并且进行处理,而不是让整个程序失败。

按自己的方式出错

异常可以在某些东西出错时自动引发,甚至创建自己的异常类型。

raise语句

为了引发异常,可以使用一个类(Exceptiond的子类)或者实例参数调用raise语句。

>>> raise IOError
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    raise IOError
OSError
>>> raise IOError("error")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    raise IOError("error")
OSError: error

自定义异常类

尽管內建的异常类已经包括了大部分的情况,而且对于很多要求都已经满足了。但是!!!在有些时候还是要创建自己的异常类。方法是使用继承来实现。但是是必须从Exception类继承(也可以是其子类)。

class NewException(Exception):
    pass

捕捉异常

捕捉异常使用try/except来实现。

try:
    x=10
    y=0
    print (x / y)
except ZeroDivisionError:
    print("y can't be zero!")

# result:
# y can't be zero!

多条except子句

try:
    x=input("Enter the first number: ")
    y=input("Enter the second number: ")
    print(x/y)
except ZeroDivisionError:
    print("The second number can't be zero!")
except TypeError:   
    print("That wasn't a number,was it?")

#result:
#That wasn't a number,was it?

用一个块捕捉两个异常

将其作为元祖列出

try:
    x=input("Enter the first number: ")
    y=input("Enter the second number: ")
    print(x/y)
ex自cept (ZeroDivisionError,TypeError,NameError):
    print("Your name were bogus...")

捕捉对象

try:
    x=10
    y=0
    print(x/y)
except(ZeroDivisionError,TypeError,NameError) as e:
    print(e)

这种写法可以将异常打印出来

else

try :
    print ("A is simple task")
except :
    print('What?')

else:
    print("It went as planed.")

自行领悟其中精髓

最后。。。

不管try子句中是否发生异常,finally子句一定会执行。

try:
    x = 2/4

except NameError:
    print("Unknow variable")
else :
    print("That went well")
finally:
    print("Cleaning up")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值