当前位置: 首页 > news >正文

5Python异常处理与模块导入全指南

目录

什么是异常?

异常的捕获方法:

为什么要捕获异常?

捕获异常的语法:

异常的else和finally语法:


什么是异常?

异常就是程序运行过程中出现了错误,也就是我们常说的出bug了-。-

异常的捕获方法:

为什么要捕获异常?

在可能发生异常的地方,进行捕获。当异常出现的时候,提供解决方式,而不是任由其导致程序无法运行。

捕获异常的语法:

1.try:

可能出现异常的语句

2.except  (异常)  as  别名:

出现异常执行的语句

3.except  Exception   as  别名:

捕获所有的异常

#演示捕获异常#基本捕获语法
try:f = open('C;\\abc.txt','r',encording='utf-8')
except:print("出现异常了,因为abc文件不存在")
'''结果:出现异常了,因为abc文件不存在'''#捕获指定异常:
try:print(name)
except NameError as e:print(f"出现异常了,原因是{e}")
'''结果:出现异常了,原因是name 'name' is not defined'''如果出现了其他类型异常,则不能捕获,例如:
try:f = open('C;\\abc.txt','r',encording='utf-8')
except NameError as e:print(f"出现异常了,原因是{e}")
'''
Traceback (most recent call last):File "D:\opython工程\go-learn\5.7.py", line 1143, in <module>f = open('C;\\abc.txt','r',encording='utf-8')
TypeError: 'encording' is an invalid keyword argument for open()
'''    #捕获多个异常
try:1/0print(name)
except (NameError,ZeroDivisionError) as e:print(f"出现异常了,原因是{e}")
#未正确设置捕获异常类型,将无法捕获异常#捕获所有异常
try:1/0print(name)
except Exception as e:print(f"出现异常了,原因是{e}")
'''结果:出现异常了,原因是division by zero'''

异常的else和finally语法:

else:

没出现异常执行的语句

finally:

不管有无异常都执行后面的语句

#else在未出现异常时执行的代码
try:print(123)
except Exception as e:print(f"出现异常了,原因是{e}")
else:print("没出现异常")
'''结果
123
没出现异常
'''#无论有没有异常都执行finally后面的代码
try:print(name)
except Exception as e:print(f"出现异常了,原因是{e}")
finally:print("没出现异常")
'''结果:
出现异常了,原因是name 'name' is not defined
没出现异常
'''

异常的传递性:

在 Python 中,异常的传递性(也称为异常的传播)是指当异常在函数或方法中被触发但未被捕获时,它会自动向上(向调用栈的上层)传递,直到被捕获处理或导致程序终止。

碰到异常代码会终止

def func1():print("func1开始执行")1/0print("func1结束执行")def func2():print("func2开始执行")func1()print("func2结束执行")
def main():func2()main()

在调用函数时,仍然可以使用try和except接收异常

def func1():print("func1开始执行")1/0print("func1结束执行")def func2():print("func2开始执行")func1()print("func2结束执行")def main():try:func2()except Exception as e:print(f"出错了,原因是{e}")main()

模块的概念和导入:

什么是模块?

模块就是一个Python代码文件,内含类、函数、变量等,我们可以导入进行使用。

如何导入?

1. import  模块名   :直接导入

2.from  模块  import  功能  : 导入模块的指定功能

3.as可以指定别名

#演示Python的模块导入#使用import导入time模块使用sleep功能(函数)
import time
print("吃了吗")
time.sleep(3)
print("吃了")#使用from导入time的sleep功能(函数)
from time import sleep
print("吃了吗")
sleep(3)
print("吃了")#使用*导入time模块的全部功能
from time import *
print("吃了吗")
sleep(3)
print("吃了")
print(localtime())#使用as给模块改名
import time as f
print("吃了吗")
f.sleep(3)
print("吃了")#使用as给模块的特定功能改名
from time import sleep as sl
print("吃了吗")
sl(3)
print("吃了")

自定义python包:

什么是Python的包?

    包就是一个文件夹,里面可以存放许多Python的模块(代码文件),通过包,在逻辑上将一批模块归为一类,方便使用。

如何自定义:

1:创建一个package包

2:创建一个python文件

3:在此文件中编写函数功能

4:可以像调用模块的那样调用mod1中的函数

import mypackage.mod1
或者
from mypackage.mod1 import ppp
ppp()#结果是123

all 变量的作用

同模块中学习到的是一个作用,控制 import*能够导入的内容

在_init_文件中定义all变量,可以控制 import*能够导入的内容,只有all变量中的函数可以被导入

如何导入第三方pyhton包:

安装成功后可以import导入使用

方法一:使用cmd命令提示符

格式:

pip  install  包名   

pip  install  -i    https://pypi.tuna.tsinghua.edu.cn/simple  包名  :从国内镜像站下载速度更快

方法二:pycharm中安装包

 

综合案例:

------------------这是str_util.py的代码-----------------------------------def str_reserve(s):s=input("请输入一个字符串\n")s=s[::-1]print(f"这个字符串反转后是:\n{s}")def str_sub():s = input("请输入一个字符串\n")x=int(input("请输入起始下标\n"))y=int(input("请输入终止下标\n"))s_sub=s[x:y]print(s_sub)------------------这是file_util.py的代码-----------------------------------def print_file_info():name=input("请输入文件名\n")f= Nonetry:f=open(f"{name}",'r',encoding='utf-8')print(f)except:print("出现异常了,因为文件不存在\n")finally:if f is not None:f.close()def append_to_file():f = Nonename = input("请输入文件名\n")try:f = open(f"{name}", 'a', encoding='utf-8')data = input("请输入追加内容\n")f.write(f"{data}\n")except:print("出现异常了,因为文件不存在\n")finally:if f is not None:f.close()------------------这是代码调用测试-----------------------------------import mypackage.str_util
import mypackage.file_utilstr_sub()
str_reserve()print_file_info()
append_to_file()

这是我的个人学习笔记,主要用于记录自己对知识点的理解和梳理。由于目前仍在学习探索阶段,内容中难免存在理解偏差或表述疏漏,恳请各位大佬不吝赐教,多提宝贵意见~ 若有不同看法,欢迎理性交流探讨,感谢包容与指正!

http://www.xdnf.cn/news/1273213.html

相关文章:

  • 元数据管理与数据治理平台:Apache Atlas 分类传播 Classification Propagation
  • vue中使用h5plus
  • 【Elasticsearch入门到落地】16、RestClient查询文档-快速入门
  • Java Stream流详解:从基础语法到实战应用
  • spring-ai整合PGVector实现RAG
  • 【代码随想录day 15】 力扣 257. 二叉树的所有路径
  • uni-app 网络请求终极选型:uni.request、axios、uni-network、alova 谁才是你的真命请求库?
  • LeetCode_字符串
  • LeetCode 刷题【37. 解数独】
  • 计算XGBoost分类模型的错误率
  • 网工笔记——BGP协议
  • 解决 Linux 下 “E: 仓库xxx没有数字签名” 问题
  • 编程基础之多维数组——同行列对角线的格
  • scanpy单细胞转录组python教程(四):单样本数据分析之降维聚类及细胞注释
  • (Python)爬虫进阶(Python爬虫教程)(CSS选择器)
  • stm32没有CMSIS文件
  • 【精彩回顾·成都】成都 User Group×柴火创客空间:开源硬件驱动 AI 与云的创新实践!
  • vue和react和uniapp的状态管理分别是什么,并且介绍和怎么使用
  • Day38--动态规划--322. 零钱兑换,279. 完全平方数,139. 单词拆分,56. 携带矿石资源(卡码网),背包问题总结
  • 如何理解SA_RESTART”被信号中断的系统调用自动重启“?
  • Vue3 组件化开发
  • 人工智能技术发展历史演变
  • Filter,Interceptor拦截器-登录校验
  • 关于城市农村创业的一点构想
  • RecyclerView 缓存机制
  • 堆----3.数据流的中位数
  • Slab 算法浅析
  • HTML全景效果实现
  • 【Python 语法糖小火锅 · 第 2 涮】
  • 容器技术基础与实践:从镜像管理到自动运行配置全攻略