前言
在Python编程中,我们时常会遇到各种异常和错误,同时我们也会使用多个模块和包来组织和结构化我们的代码。理解如何有效地处理异常和组织我们的代码是成为一个成功的Python程序员的关键。
.
在本教程中,我们将深入探讨Python中的异常处理,从基本的异常捕获到更高级的异常处理技术,如指定错误类型和创建自定义异常。我们还将讨论Python中的模块和包,这将帮助我们更好地组织和管理我们的代码。
个人主页:尘觉主页
个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力
在csdn获奖荣誉: csdn城市之星2名
Java全栈群星计划top前5
端午大礼包获得者
阿里云专家博主
亚马逊DyamoDB结营
欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦
程序在运⾏时,如果遇到到⼀个错误,会停⽌程序的执⾏,并且提示⼀些错误信息,这就是异常。
程序停⽌执⾏并且提示错误信息这个动作,称之为:抛出(raise)异常。
程序开发时,很难将所有的特殊情况都处理的⾯⾯俱到,通过异常捕获可以针对突发事件做集中的处理,从⽽保证程序的稳定性和健壮性 。
在程序开发中,如果对某些代码的执⾏不能确定是否正确,可以增加 try(尝试) 来捕获异常 。
语法:
try:
可能出现异常的代码
except:
出现异常的处理代码
示例:
try:
input = int(input("请输入数字:"))
print(input)
except:
print("请输入正确的数字")
效果:
上面是简单的捕获异常语法 ,接下来给大家看看错误类型捕获。
在程序执⾏时,可能会遇到不同类型的异常,并且需要针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了。
语法:
try:
可能出现异常的代码
except 错误类型 1:
出现异常的处理代码
except (错误类型 2,错误类型 2):
出现异常的处理代码
示例:
try:
i = int(input("请输入数字1:"))
j = int(input("请输入数字2:"))
print(i/j)
except ValueError:
print("请输入正确的数字")
except ZeroDivisionError:
print("除数不能为零")
效果:
在开发时,要预判到所有可能出现的错误,还是有⼀定难度的 。
如果希望程序⽆论出现任何错误,都不会因为程序抛出异常⽽被终⽌,可以再增加⼀个 except 。
语法:
try:
可能出现异常的代码
except Exception as result:
出现未知异常的处理代码
演示:
try:
i = int(input("请输入数字1:"))
j = int(input("请输入数字2:"))
print(i/j)
except Exception as result:
print(result)
效果:
程序运行过程中,如果没有异常发生,需要执行一段代码。这个时候可以使用 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("稍安勿躁,无事发生")
效果:
程序运行过程中,一旦发生异常,代码就会跳转到 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("风雨无阻,使命必达")
效果:
在开发中,除了代码执⾏出错时被动抛出异常之外, 还可以根据应⽤程序特有的业务需求主动抛出异常。
语法:
raise Exception(“异常描述”)
示例:
try:
sex = str(input("你的性别是:"))
if sex == '女':
raise Exception("要男生")
else:
print(sex)
except Exception as result:
print(result)
效果:
- 当项目代码越来越多,不可能把所有代码都放到一个 py 文件中,一个项目往往由多个 py 文件组成;
- 模块是 Python 程序架构的⼀个核⼼概念 ,每⼀个以扩展名 py 结尾的 Python 源代码⽂件都是⼀个模块;
- 模块名同样也是⼀个标识符,需要符合标识符的命名规则;
- 在模块中定义的全局变量 、函数、类 都是提供给外界直接使⽤的⼯具,模块就好⽐是⼯具包,要想使⽤这个⼯具包中的⼯具,就需要先导⼊这个模块 。
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())
语法:
import 模块名 as 模块别名
注:
- 如果两个模块,存在同名的函数,那么后导⼊模块的函数,会覆盖掉先导⼊的函数 ;
- 开发时 import 代码应该统⼀写在代码的顶部,更容易及时发现冲突 ;
- ⼀旦发现冲突,可以使⽤ as 关键字 给其中⼀个⼯具起⼀个别名 。
演示:
import Cat as c
print(c.Cat.drink())
import 模块名 是⼀次性把模块中所有内容全部导入。
如果希望从某⼀个模块中导⼊部分内容,就可以使⽤ from … import 的⽅式 。
语法:
from 模块名 import 工具名
from 模块名 import *
导⼊之后不需要通过 模块名. 可以直接使⽤模块提供的⼯具 —— 全局变量、函数、类 。
演示:
from Cat import Cat
print(Cat.drink())
如果是被其他⽂件导⼊的模块,_ name _就是模块名 ;
如果是当前执⾏的程序 name 是 “main” ;
在很多 Python ⽂件中都会看到以下格式的代码:
# 在代码的最下⽅
def main():
# ...
pass
# 根据 name 判断是否执⾏下⽅代码
if __name__ == "main":
main()
包是⼀个包含多个模块的特殊⽬录,一个目录下需要有
__init__.py
文件 ,使用包的目的是一次性可以把一个目录下所有的模块通过一条import语句导入。
演示:
1、在项目中新建一个目录,然后再这个,目录下新建文件
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代码,使其更加结构化和可管理。
我们已经学会了:
创建和使用模块和包来更好地组织我们的代码。
如何有效地捕获和处理各种异常和错误,来创建更稳定和健壮的Python程序。
使用try,except,else和finally来构建复杂的异常处理结构。
如何创建自定义异常来处理特定的业务逻辑问题。
希望您喜欢本教程!如果您有任何问题或想进一步探索这些概念,请不要犹豫,开始尝试创建和使用自己的模块和包,并在您的Python项目中实施高级异常处理策略。祝您编程愉快!
热门专栏推荐
想学习vue的可以看看这个
java基础合集
数据库合集
redis合集
nginx合集
linux合集
手写机制
微服务组件
spring_尘觉
springMVC
mybits
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力