百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

十七、深入Python异常处理(python 异常处理)

toyiye 2024-08-25 15:44 4 浏览 0 评论

「@Author:BY Runsen」

在Python 中的错误和异常是什么?

通常来说,程序中的错误至少包括两种,一种是语法错误,另一种则是异常。

语法错误

所谓语法错误,你应该很清楚,也就是你写的代码不符合编程规范,无法被识别与执行,比如下面这个例子的语法错误

下面的代码无法被识别和执行

if name is not None
    print(name)

上面的代码If 语句漏掉了冒号,不符合 Python 的语法规范,所以程序就会报错invalid syntax

异常

异常则是指程序的语法正确,也可以被执行,但在执行过程中遇到了错误,抛出了异常。

比如,最常见的除数不能为0。变量没有定义。数据类型的运算。

10 / 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero

order * 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'order' is not defined

1 + [1, 2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'list'

上面报的是常见的报错,比如ZeroDIvision NameError 和 typeError

还有很多其他异常的类型如keyError 字典的键找不到和FileNotFoundError 文件不存在

try except

使用Python的异常处理语句,可以非常优雅地处理发生的异常。

下面是Python的异常处理语句的模板语法

try:
    # 可能触发异常的语句块
except:  
    # 这里执行异常处理的相关代码,打印输出等
else:
    # 如果没有异常则执行else中的代码
finally:
    # 不管代码是否异常,都会执行,一般是资源的关闭和释放

首先,检测try语句块中的错误,except语句捕获异常信息并处理。如果在try子句执行时没有发生异常,Python将执行else语句后的语句,然后控制流通过整个try语句。

比如看下面的例子。

try:
    print(a*2)
except TypeError:
    print("TypeError")
except:
    print("Not Type Error & Error noted")
    
Not Type Error & Error noted

由于a没有定义,报的是NameError而不是TypeError。异常最终被except:部分的程序捕捉。

这里,Runsen补充一下非常重要的知识点:

抛出异常

抛出异常模板:raise 异常类名(附加异常信息) 。下面是示例代码:

s = "RunsenRunsen"
try:
    if len(s) > 10:
        raise Exception("超过10个字符")
except Exception as err:
    print(err)
    
超过10个字符

有时产生的异常,不想在当前处理,那么就可以使用raise抛出异常。下面是示例代码:

def division():
    a = float(input('输入被除数:'))
    b = float(input("输入除数:"))
    if a < 0 or b < 0:
        raise Exception("我是Runsen,要求:输入的数不能小于0。") #出现负数抛出异常。
    c = a / b
    print(a,'÷',b,'=',c)
    
try:
    division()
except Exception as d:
    print('出错了,',d)
    
运行结果:
输入被除数:5
输入除数:-1
出错了, 我是小学生,输入的数不能小于0。
输入被除数:5
输入除数:0
出错了, float division by zero

万能异常

因为异常分了不同的种类,如果不知道,那么使用exception异常处理就足够了,它可以接收任何异常

value = 'hello'
try:
    int(value)
#万能异常处理  
except Exception as e:
    print(e)

自定义异常

实际开发中,有时候系统提供的异常类型不能满足开发的需求。这时候你可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承。

# 自定义异常类 MyError ,继承普通异常基类 Exception
class MyError(Exception):
        def __init__(self, value):
            self.value = value
        def __str__(self):
            return repr(self.value)
try:
    num = input("请输入数字:")
    if not num.isdigit():  # 判断输入的是否是数字
        raise MyError(num)  # 输入的如果不是数字,手动指定抛出异常
except MyError as e:
    print("MyError:请输入数字。您输入的是:", e.value)

请输入数字:1
请输入数字:Runsen
MyError:请输入数字。您输入的是: Runsen

扩展

大型社交网站的后台,需要针对用户发送的请求返回相应记录。用户记录往往储存在 key-value 结构的数据库中,每次有请求过来后,我们拿到用户的 ID,并用 ID 查询数据库中此人的记录,就能返回相应的结果。而数据库返回的原始数据,往往是 json string 的形式,这就需要我们首先对 json string 进行 decode(解码),你可能很容易想到下面的方法:

import json
raw_data = queryDB(uid) # 根据用户的 id,返回相应的信息。queryDB这里是一个函数
data = json.loads(raw_data)

上面的代码是不是就足够呢?

json.loads()函数中,如果输入的字符串不符合规范,那么就无法解码,就会抛出异常。

raw_data一定是json吗?,因此写之前就应该考虑如何处理异常

try:
    data = json.loads(raw_data)
except JSONDecodeError as err:
    print('JSONDecodeError: {}'.format(err))


?

本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

?


Reference

[1]

传送门~: https://github.com/MaoliRUNsen/runsenlearnpy100

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码