飞道的博客

Python学习笔记(十八):异常处理

444人阅读  评论(0)

1 异常概念

当检测到⼀个错误时,解释器就⽆法继续执⾏了,反⽽出现了⼀些错误的提示,这就是所谓的"异常"。
例如:以 r ⽅式打开⼀个不存在的⽂件。

f=open('test.txt','r')
Traceback (most recent call last):
  File "E:01异常测试.py", line 4, in <module>
    f=open('test.txt','r')
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

2 异常的写法

异常的语法如下,except相当于捕获了所有的异常,且当异常发生时,将执行except内的语句。

try:
 	可能发⽣错误的代码
except:
 	如果出现异常执⾏的代码

例如,我们可以在以r访问模式读取txt文件出现异常时,通过异常处理,改为通过w访问模式读取txt文件。

try:
    f=open('test.txt','r')
#发生异常时,执行except中的语句
except:
    f=open('test.txt','w')

3 捕获指定异常

语法如下。

try:
 	可能发⽣错误的代码
except 异常类型:
 	如果捕获到该异常类型执⾏的代码

我们可以将未命名的变量num进行打打印,以此来产生NameError异常,并接收。

try:
    print(num)
except NameError:
    print("错误")
except:
    print("未知异常")
错误

4 捕获多个指定异常

try:
    print(1/0)
except (NameError,ZeroDivisionError) :
    print("有错误")
except:
    print("不知道啥情况")
有错误

4 打印异常信息

在捕获多个异常,有时我们不知道究竟发生了哪个异常,这时候我们就可以通过打印异常信息进行判断。

try:
    print(num)
#捕获异常信息
except (NameError,ZeroDivisionError) as result:
    print(result)
except:
    print("不知道啥情况")
name 'num' is not defined

5 捕获所有异常

我们可以通过所有程序异常类的父类Exception来捕获所有异常。

try:
    print(1/0)
except Exception as result:
    print(result)
    print("异常已经被捕获")
division by zero
异常已经被捕获

5 else语句

当没有异常发生时,程序将会执行else中的语句。且只有进行了异常的捕获(及except语句存在),书写else语句才不会报错。

try:
    print("hello")
#捕获异常
except Exception as result:
    print(result)
#只有进行了异常的捕获才能进行else
#异常没有发生时执行
else:
    print("没有发生异常")
hello
没有发生异常

6 finally语句

finally表示的是⽆论是否异常都要执⾏的代码,例如关闭⽂件。

try:
    f=open('test.txt','r')
except Exception as result:
    print(result)
    f=open('test.txt','w')
finally:
    f.close()

7 自定义异常

我们可以通过一个例子来体验如何自定义异常。
我们让程序开始时要求用户输入一串密码,若密码长度小于3则抛出自定义的异常。
自定义异常需要实现__init__方法和__str__方法,分别用来初始化与打印异常信息。

class ShortNameException(Exception):
    def __init__(self,length,minLen):
        self.length=length
        self.minLen=minLen
    def __str__(self):
        return f'你输入的长度为{
     self.length},不能少于{
     self.minLen}'

try:
    code=input("请输入你的密码\n")
    if(len(code)<3):
        raise ShortNameException(len(code),3)
except ShortNameException as result:
    print(result)
finally:
    print("结束")
请输入你的密码
23
你输入的长度为2,不能少于3
结束

转载:https://blog.csdn.net/Demon_LMMan/article/details/117399382
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场