Python 10之异常模块包

2023-09-18 10:36:23

😀前言
在Python编程中,我们时常会遇到各种异常和错误,同时我们也会使用多个模块和包来组织和结构化我们的代码。理解如何有效地处理异常和组织我们的代码是成为一个成功的Python程序员的关键。
.
在本教程中,我们将深入探讨Python中的异常处理,从基本的异常捕获到更高级的异常处理技术,如指定错误类型和创建自定义异常。我们还将讨论Python中的模块和包,这将帮助我们更好地组织和管理我们的代码。

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

Python 10之异常模块包

1、异常

程序在运⾏时,如果遇到到⼀个错误,会停⽌程序的执⾏,并且提示⼀些错误信息,这就是异常。

程序停⽌执⾏并且提示错误信息这个动作,称之为:抛出(raise)异常。

程序开发时,很难将所有的特殊情况都处理的⾯⾯俱到,通过异常捕获可以针对突发事件做集中的处理,从⽽保证程序的稳定性和健壮性 。

1.1 捕获异常

在程序开发中,如果对某些代码的执⾏不能确定是否正确,可以增加 try(尝试) 来捕获异常 。

语法:

try:

​ 可能出现异常的代码

except:

​ 出现异常的处理代码

示例:

try:
    input = int(input("请输入数字:"))
    print(input)
except:
    print("请输入正确的数字")

效果:

image-20230903201806028

上面是简单的捕获异常语法 ,接下来给大家看看错误类型捕获

1.2 错误类型捕获

在程序执⾏时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了。

语法:

try:

​ 可能出现异常的代码

except 错误类型 1:

​ 出现异常的处理代码

except (错误类型 2,错误类型 2):

​ 出现异常的处理代码

示例:

try:
    i = int(input("请输入数字1:"))
    j = int(input("请输入数字2:"))
    print(i/j)
except ValueError:
    print("请输入正确的数字")
except ZeroDivisionError:
    print("除数不能为零")

效果:

image-20230903201912572

1.3 捕获未知错误

在开发时,要预判到所有可能出现的错误,还是有⼀定难度的 。

如果希望程序⽆论出现任何错误,都不会因为程序抛出异常⽽被终⽌,可以再增加⼀个 except 。

语法:

try:

​ 可能出现异常的代码

except Exception as result:

​ 出现未知异常的处理代码

演示:

try:
    i = int(input("请输入数字1:"))
    j = int(input("请输入数字2:"))
    print(i/j)
except Exception as result:
    print(result)

效果:

image-20230903202002312

1.4 没有异常发生才执行的代码

程序运行过程中,如果没有异常发生,需要执行一段代码。这个时候可以使用 else。

语法格式 :

try:

​ 可能出现异常的代码

except Exception as result:

​ 出现未知异常的处理代码

else:

​ 没有异常执行的代码

try:
    i = int(input("请输入数字1:"))
    j = int(input("请输入数字2:"))
    print(i/j)
except Exception as result:
    print(result)
else:
    print("稍安勿躁,无事发生")

效果:

image-20230903202048210

1.5 无论是否有异常,都要执行的代码

程序运行过程中,一旦发生异常,代码就会跳转到 except,有时需要不论发生任何异常,都必须要执行一段代码。这个时候可以使用 finnly。

语法:

try:

​ 可能出现异常的代码

except Exception as result:

​ 出现未知异常的处理代码

finally:

​ 无论是否有异常都要执行的代码

演示:

try:
    i = int(input("请输入数字1:"))
    j = int(input("请输入数字2:"))
    print(i/j)
except Exception as result:
    print(result)
finally:
    print("风雨无阻,使命必达")

效果:

image-20230903202150624

1.6 抛出异常

在开发中,除了代码执⾏出错时被动抛出异常之外, 还可以根据应⽤程序特有的业务需求主动抛出异常。

语法:

raise Exception(“异常描述”)

示例:

try:
    sex = str(input("你的性别是:"))
    if sex == '女':
        raise Exception("要男生")
    else:
        print(sex)
except Exception as result:
    print(result)

效果:

image-20230903202418282

2、模块

  • 当项目代码越来越多,不可能把所有代码都放到一个 py 文件中,一个项目往往由多个 py 文件组成;
  • 模块是 Python 程序架构的⼀个核⼼概念 ,每⼀个以扩展名 py 结尾的 Python 源代码⽂件都是⼀个模块;
  • 模块名同样也是⼀个标识符,需要符合标识符的命名规则;
  • 在模块中定义的全局变量 、函数、类 都是提供给外界直接使⽤的⼯具,模块就好⽐是⼯具包,要想使⽤这个⼯具包中的⼯具,就需要先导⼊这个模块 。

2.1 模块的导入方式

1、import 导入

语法:

import 模块名

导⼊之后通过 模块名. 使⽤模块提供的⼯具 —— 全局变量、函数、类

演示:

新建一个Cat.py文件:

# 定义Cat类
class Cat:
    # name 为类属性,通过 Cat.name 访问
    name = "小黄"

    def __init__(self, name="小白"):
        # _name 为私有属性
        self._name = name

    # drink 为类的静态方法
    @staticmethod
    def drink():
        print("喝水")

再建一个Test.py

import Cat
# 调用 Cat 中的 Cat类的drink方法
print(Cat.Cat.drink())

2.2 as 指定模块别名

语法:

import 模块名 as 模块别名

注:

  • 如果两个模块,存在同名的函数,那么后导⼊模块的函数,会覆盖掉先导⼊的函数 ;
  • 开发时 import 代码应该统⼀写在代码的顶部,更容易及时发现冲突 ;
  • ⼀旦发现冲突,可以使⽤ as 关键字 给其中⼀个⼯具起⼀个别名 。

演示:

import Cat as c

print(c.Cat.drink())

2.3 from…import 导⼊

import 模块名 是⼀次性把模块中所有内容全部导入。

如果希望从某⼀个模块中导⼊部分内容,就可以使⽤ from … import 的⽅式 。

语法:

from 模块名 import 工具名

from 模块名 import *

导⼊之后不需要通过 模块名. 可以直接使⽤模块提供的⼯具 —— 全局变量、函数、类 。

演示:

from Cat import Cat

print(Cat.drink())

2.4 _ name _属性

如果是被其他⽂件导⼊的模块,_ name _就是模块名 ;

如果是当前执⾏的程序 name 是 “main” ;

在很多 Python ⽂件中都会看到以下格式的代码:

# 在代码的最下⽅ 
def main(): 
	# ... 
	pass 

# 根据 name 判断是否执⾏下⽅代码 
if __name__ == "main": 
	main() 

3、包

包是⼀个包含多个模块的特殊⽬录,一个目录下需要有__init__.py文件 ,使用包的目的是一次性可以把一个目录下所有的模块通过一条import语句导入。

演示:

1、在项目中新建一个目录,然后再这个,目录下新建文件

image-20230903202537713

2、__init__.py文件

from . import Cat
from . import User

作用是从当前目录导入Cat ,User 模块

3、到这个包的上级目录创建一个文件调用看看。

from jie.Cat import Cat
from jie.User import user

print(Cat.drink())
print(user.age(18))
nit__.py`文件 ,使用包的目的是一次性可以把一个目录下所有的模块通过一条import语句导入。

演示:

1、在项目中新建一个目录,然后再这个,目录下新建文件

[外链图片转存中...(img-Bz1otX7Y-1695004242184)]

2、`__init__.py`文件

```python
from . import Cat
from . import User

作用是从当前目录导入Cat ,User 模块

3、到这个包的上级目录创建一个文件调用看看。

from jie.Cat import Cat
from jie.User import user

print(Cat.drink())
print(user.age(18))

😄总结

通过本教程,我们已经掌握了Python中异常处理的基本和高级概念,从简单的异常捕获到创建和抛出自定义异常。我们也学习了如何通过模块和包来组织我们的Python代码,使其更加结构化和可管理。

我们已经学会了:

  1. 创建和使用模块和包来更好地组织我们的代码。

  2. 如何有效地捕获和处理各种异常和错误,来创建更稳定和健壮的Python程序。

  3. 使用try,except,else和finally来构建复杂的异常处理结构。

  4. 如何创建自定义异常来处理特定的业务逻辑问题。

希望您喜欢本教程!如果您有任何问题或想进一步探索这些概念,请不要犹豫,开始尝试创建和使用自己的模块和包,并在您的Python项目中实施高级异常处理策略。祝您编程愉快!

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

更多推荐

互联网摸鱼日报(2023-09-18)

互联网摸鱼日报(2023-09-18)36氪新闻最前线|号外电摩12.68万元起订,配16.9度一体压铸电池包本周双碳大事:CCER交易管理办法获生态环境部原则通过;明阳斥资100亿元加码光伏项目;“全路程”获2亿元D轮融资200亿,贝佐斯投出全球最大天使轮12种自由职业者管理时间的高效方法开彩票站,还是一门好生意吗:

阿曼市场最全开发攻略,看这一篇就够了

中东是一个充满外贸机遇的市场,已经成为很多外贸人重点开发的市场。阿曼的海岸南方和东方临阿拉伯海,东北方则抵阿曼湾。阿曼因为扼守着世界上最重要的石油输出通道——波斯湾和阿曼湾之间的霍尔木兹海峡,所以地理位置非常重要,商机也是很多的。作为外贸人,如何开发阿联酋市场客户呢?今天就来谈谈这个问题。文章略长,大家点赞收藏+关注,

【深度学习】 Python 和 NumPy 系列教程(十九):Matplotlib详解:2、3d绘图类型(5)3D等高线图(3D Contour Plot)

目录一、前言二、实验环境三、Matplotlib详解1、2d绘图类型2、3d绘图类型0.设置中文字体1.3D线框图(3DLinePlot)2.3D散点图(3DScatterPlot)3.3D条形图(3DBarPlot)4.3D曲面图(3DSurfacePlot)5.3D等高线图(3DContourPlot)一、前言Py

设计模式:简单工厂模式

目录代码实现总结简单工厂模式(SimpleFactoryPattern)是一种创建型设计模式,它提供了一种创建对象的最简单方式,通过一个工厂类根据传入的参数来决定创建哪种产品类的实例。在简单工厂模式中,有三个主要角色:产品(Product):定义了工厂创建的对象的接口。具体产品(ConcreteProduct):实现了

ElasticSearch(ES)简单介绍

ES简介Elasticsearch(通常简称为ES)是一个开源的分布式搜索和分析引擎,旨在处理各种类型的数据,包括结构化、半结构化和非结构化数据。它最初是为全文搜索而设计的,但随着时间的推移,它已经演变成一个功能强大的数据分析工具,用于实时搜索、日志和事件数据分析、业务智能等各种用途。以下是关于Elasticsearc

正则表达式基础

正则表达式是一种用来匹配字符串的技术,它可以通过特定的模式来搜索、替换或提取字符串中的内容。正则表达式的语法有很多不同的标记和修饰符,以下是一些常见的基础语法代码:\d:匹配任意一个数字。\w:匹配任意一个字母或数字。\s:匹配任意一个空白字符。.:匹配除换行符以外的任意一个字符。[abc]:匹配字符集合中的任意一个字

RocketMQ概论

目录前言:1.概述2.下载安装、集群搭建3.消息模型4.如何保证吞吐量4.1.消息存储4.1.1顺序读写4.1.2.异步刷盘4.1.3.零拷贝4.2.网络传输前言:RocketMQ的代码示例在安装目录下有全套详细demo,所以本文不侧重于讲API这种死的东西,而是侧重于讲解RocketMQ的特性。消息中间件无非需要关注

OJ练习第173题——单词接龙 II

单词接龙II力扣链接:126.单词接龙II题目描述按字典wordList完成从单词beginWord到单词endWord转化,一个表示此过程的转换序列是形式上像beginWord->s1->s2->…->sk这样的单词序列,并满足:每对相邻的单词之间仅有单个字母不同。转换过程中的每个单词si(1<=i<=k)必须是字典

算法通关村 | 透彻理解动态规划

1.斐波那契数列1,1,2,3,5,8,13,.....f(n)=f(n-1)+f(n-2)代码实现publicstaticintcount_2=0;publicintfibonacci(intn){if(n<=2){count_2++;returnn;}intf1=1;intf2=2;intsum=0;for(int

Redis主从复制(Redis6.2.5版本)

1、Redis单击服务问题?Redis的单机服务在实际的应用中会有很多的问题,所以在实际的使用中如果使用了redis服务,往往都不是单机服务,都会配置主从复制或者哨兵机制及redis的集群服务等。Redis的单机服务,当主机发生机器故障的时候,我们就需要做数据迁移,同时也会大概率出现数据大量都是的情况,并且短时间内,系

ChatGPT:解释Java中 ‘HttpResponse‘ 使用 ‘try-with-resources‘ 的警告和处理 ‘Throwable‘ 打印警告

ChatGPT:解释Java中‘HttpResponse’使用‘try-with-resources’的警告和处理‘Throwable’打印警告我在IDEA中对一个函数的警告点击了ignore,怎么撤回这个呢ChatGPT:要撤回在IDEA中对一个函数的警告的忽略,您可以按照以下步骤进行操作:打开您的项目,并在编辑器中

热文推荐