趁着课余时间学点Python(十三)异常处理

Posted 布小禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了趁着课余时间学点Python(十三)异常处理相关的知识,希望对你有一定的参考价值。

前言

📢 博客主页:❤布小禅❤
📢 作者专栏:
❤Python❤
❤Java❤

关于异常处理,这个是必学的

一、异常/错误

异常就是我们在写代码的时候,爆红啦,高亮啦什么的,还有运行的时候碰到的各种报错啦

我们经常会因为各种各样的报错而头疼——哦!天呐!又报错了!

但是我们应该想想好的,我们编程水平不也随着解决各种各样的报错而提高了吗?

当然我们也可以通过某些方式来避免这种异常,当然这是我们在解决了许许多多的报错后的事啦,也就是现在!是的没错就是现在!O(∩_∩)O哈哈~

一般分为三个类型:编译时错误 、运行时错误 、逻辑型错误

1 编译时错误

就是在写代码的时候,出现了语法上的错误,比如在定义变量的时候

 i = 0

在这里,我们就犯了个编译时的错误,缩进不对

IndentationError: unexpected indent

2. 运行时错误

就是语法上没有出现错误,但是编译的时候会出现错误,比如

li = [1, 2, 3, 4, 5]
print(li[5])

在这里,虽然不会爆红,但是却会在运行的时候出现错误

IndexError: list index out of range

意思是索引超出范围,我们的列表的长度为5,但是下标却是从0开始的

3. 逻辑型错误

就是我们的代码不符合逻辑

a = 1;
b = 0;
print(a/b)

就会出现错误

ZeroDivisionError: division by zero

二、异常处理

知道了异常都是些什么类型的,那么我们就来看看,异常怎么处理

是的,我们需要处理异常

在异常没有发生的时候,就将它预料到,提前给他处理了

这叫什么?很明显嘛!紧急避险!

1. 捕获异常

可以使用try:…except:…语句来捕获异常

格式:

try:
    有可能出错的代码块
except 错误类型(可选):
    如果出错应该执行的代码
else:
    如果没错应该执行的代码
finally:
    不管有没有出错,都会执行的代码

当然那个错误类型,如果你不知道是什么类型,不写也可以

直接写解决方案就可以

1.1 try except finally语句

try:
    1/0
except:
    print("被除数不能为0")
finally:
    print("不要捣乱哦,好好输入")

1.2 try except else finally语句

try:
    1/1
except:
    print("被除数不能为0")
else:
    print("运算正确")
finally:
    print("不要捣乱哦,好好输入")

2. 抛出异常

将异常抛出给控制台

也就是平常见的红色报错

try:
    print(a)
except NameError as e:
    pass

这个代码不抛出异常的话,就什么都不执行,正常结束

而如果抛出异常就是这样

try:
    print(a)
except NameError as e:
    raise e

3. 自定义异常

通过继承Exception 类来实现自定义异常类

class MyError(Exception):
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return self.value


try:
    raise MyError(2)
except MyError as e:
    print(e.value)

输出:

结语

兴趣是最好的老师,坚持是不变的真理。
学习不要急躁,一步一个脚印,踏踏实实的往前走。
每天进步一点点,日积月累之下,你就会发现自己已经变得很厉害了。

我是布小禅,一枚自学萌新,跟着我每天进步一点点吧!

说了这么多暂时也就够了,那么就告辞吧

以上是关于趁着课余时间学点Python(十三)异常处理的主要内容,如果未能解决你的问题,请参考以下文章

趁着课余时间学点Python函数的简单理解

趁着课余时间学点Python函数的简单理解

趁着课余时间学点Python用课余时间提升自己关于高级数据类型的知识

趁着课余时间学点Python用课余时间提升自己关于高级数据类型的知识

趁着课余时间学点Python面向对象的理解(前奏)

趁着课余时间学点Python面向对象的理解(前奏)