1.8 异常 模块和包

news2025/1/11 2:57:47

文章目录

    • 了解异常
    • 异常的捕获方法
      • 为什么需要捕获异常
      • 捕获常规的异常
      • 捕获指定的异常
      • 捕获多个异常
      • 捕获所有的异常
      • 异常else
      • 异常的finally
    • 异常的传递
    • Python模块
      • 模块的导入
      • 自定义模块
      • 测试模块
      • \_all\_模块
    • Python包

了解异常

当我们的解释器运行时发生了一些没办法的操作,或者说bug,这就叫做异常。

异常的捕获方法

为什么需要捕获异常

在真实的工作生活中,我们所有的程序遇到BUG肯定不可能让他直接崩溃,也就是我们更希望遇到BUG可以做到对BUG进行提醒,然后让整个程序继续运行的这种情况,这就需要我们进行捕获异常。

捕获异常:提前假设某处会出现异常,做好提前准备,当真的异常出现的时候,就可以有后续的手段。

捕获常规的异常

基本语法:

try:
可能发生异常的代码
except:
如果出现异常执行的代码

样例:

try:
	f=open('python.txt','r',encoding="UTF-8")
except:
	f=open('python.txt','w',encoding="UTF-8")

显然当python.txt这个文件不存在的时候,就会发生异常,因为r的模式没办法新建一个文档,而调用w的话就可以解决异常。

捕获指定的异常

基本语法:

try:
出现的异常的代码
except 异常的类型 as 异常对象的变量:
如果出现异常执行的代码

样例:

try :
    print(name)
except NameError as e:
    print("出现了名字未定义的异常")
    print(e)

输出结果:
在这里插入图片描述
值得注意的是,每种异常都有其对应的名字,这种方法仅仅智能捕获对应的相对应的异常。

而e其实上就是对象,也就是异常的对象,这个后续会再进行讲解。

捕获多个异常

基本语法:

try:
出现的异常的代码
except (异常的类型1,异常的类型2) as 异常对象的变量:
如果出现异常执行的代码

样例:

try :
    print(1/0)
    print(name)
except (NameError,ZeroDivisionError) as e:
    print("出现了名字未定义的异常或者除数为零的异常")
    print(e)

输出结果:
在这里插入图片描述
值得注意的是,我们当检测到最上面的异常1/0的时候,就会直接跳到except当中,并不是等try内部的所有指令执行完。

捕获所有的异常

实际上第一种做法就是捕获所有的异常,但是下面还有一种做法也可以达到这一形式:

基本语法:

try:
出现的异常的代码
except Exception as 异常对象的变量:
如果出现异常执行的代码

样例:

try :
    print(name)
    print(1/0)
except Exception as e:
    print("出现了异常")
    print(e)

输出结果:
在这里插入图片描述

异常else

直接从样例中理解吧:

样例:

try :
    print('hello world')
except Exception as e:
    print("出现了异常")
else:
    print('我是else,没有异常的时候执行我')

输出结果:
在这里插入图片描述

异常的finally

直接从样例中理解吧:

样例:

try :
    print('hello world')
except Exception as e:
    print("出现了异常")
else:
    print('我是else,没有异常的时候执行我')
finally:
    print("无论出没出现异常,我都要来执行,一般用于文件的关闭什么的")

输出结果:
在这里插入图片描述

异常的传递

异常是具有传递性的,我们拿一个样例进行分析:

def fun1() :
    print('这是fun1的开始')
    print(1/0)
    print('这是fun1的结束')
def fun2() :
    print('这是fun2的开始')
    fun1()
    print('这是fun2的结束')
def main() :
    try:
        fun2()
    except Exception as e:
        print(e)
main()

输出结果:
在这里插入图片描述
我们可以看出,实际上异常是出现在fun1当中的,但是确是我们在main函数当中找出的异常错误,所以异常是具有传递性的。

提示:当所有的函数都没有捕获异常,程序就会报错。

Python模块

Python模块,实际上就是一个Python文件,以.py进行结尾。模块能定义函数,类和变量,模块里面也能包含可执行的代码。

模块的作用:
Python当中有很多模块,每一个模块都可以帮助我们快速的实现一些功能,比如实现和时间相关的功能就可以使用time模块,我们可以认为一个模块就是一个工具包,每一个工具包中都有各种不同的工具,来给我们进行使用。

模块的导入

基本的语法:

[from 模块名] import [模块|类|变量|函数|*][as 别名]
(*表示导入模块内的全部内容)

常用的组合形式是:

  1. import 模块名

  2. from 模块名 import 类/对象/方法等

  3. from 模块名 import *

  4. import 模块名 as 别名

  5. from 模块名 import 功能名(类/对象/方法) as 别名

  6. 样例:

import time
print('你好')
time.sleep(5)
print('再见')

输出结果:
在这里插入图片描述
在这里插入图片描述

会等待5秒,后续的不解释。

  1. 样例
from time import sleep
print('你好')
sleep(5)
print('再见')

值得注意的是,此时我们使用该方法就只需要使用其函数名即可,而不需要指出是哪一个模块里面的哪一个函数。

  1. 样例:
from time import *
print('你好')
sleep(5)
print('再见')
  1. 样例:
import time as tt
print('你好')
tt.sleep(5)
print('再见')
  1. 样例:
from time import sleep as sl
print('你好')
sl(5)
print('再见')

PS:值得注意的是模块的导入需要在开头的地方写。

自定义模块

实际上就是新建一个新的python文件,在内部定义相关函数,然后在你需要用到此函数的时候,你就可以import 该文件的名字,来引入该模块,从而使用其中的函数了,但值得注意的是文件命名规则也必须复合标识符的命名规则。

还有一点就是,我们在文件一种写了fun1,在文件2种写了fun1,然后在我们的主文件种用from 文件1 import fun1,和from 文件2 import fun1,两次调用同名文件,引入的函数就会是文件2当中的函数,实际上就是文件2当中引入的函数将文件1的函数覆盖了。

测试模块

在实际开发中,当一个开发人员写完一个模块后,为零让模块能够在项目中达到想要的效果,这个开发人员就会在这个py文件中添加上一些测试的信息。

格式:

if name == ‘main’:

def test (data1,data2):
    print(data1+data2)
    
# 下面的仅在当前文件中使用,其他导入该文件模块的不使用
if __name__ == '__main__':
    test(1,2)

_all_模块

基本语法:

all=[‘可以被外部引用的模块函数的名字’]

样例:

__all__=['test1']

def test1 (data1,data2):
    print(data1+data2)

def test2(data1,data2):
    print(data1-data2)

对应上面的这个文件中的函数来说,外部引用模块仅能引用test1函数,而不能引用test2的。(用*的方式,其他的和,all没关系,all仅针对于*)

Python包

包实际上就是一个文件夹,内部包含着 _init_.py的文件,和其他的py模块文件。包的本质还是模块。

而如果向引出包内所有模块函数,实际上就可以在_init_.py的文件中对于文件进行all约束。这里就不细讲了。

常见的第三方包:
科学计算中:numpy包
数据分析中常用的:pandas包
大数据计算中常用的:pyspark包、 apache-flink包
图形可视化常用:matplotlib包 、pyecharts包
人工智能常用: tensorflow包

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/118387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

初学Java web(十)

Filter和Listener 一.Filter 概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:权限控…

新键盘到了,我的工作效率提升了数十倍

前言:快过年了,找到了一份满意的实习,正好旧的键盘坏掉了,最近入手了一款不错的机械键盘奖励自己。到货使用一段时间了,来一篇键盘开箱的博客做一个反馈。 新键盘使用感言:优良的键盘如图云上漫步&#xf…

白质中的BOLD信号激活检测问题

白质中BOLD信号的生理意义存在争议的两个主要原因: BOLD信号依赖于脑血流量CBF和脑血容量CBV,但是白质中的血流量和血容量比灰质中的少得多(利用MRI估计的微血管数量:白质为10-192条/mm^2,灰质为99-761条/mm^2&#x…

【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解)

【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解) 方法汇总: blog.csdn.net/weixin_53403301/article/details/128441789 【精准三点定位求解汇总】利用Python或JavaScript高德地图开放平台实现精准三点定位&…

[开源工具]使用Fiddler简单计算QPS[新手开箱可用]

使用Fiddler简单计算QPS1.什么是QPS?2.怎么计算QPS?3.如何使用Fiddler得到一个API接口的QPS?3.1配置:打开Fiddler文件夹,点击Fiddler.exe运行fiddler进行配置4.如何得到本机的核心数?5.根据公式计算QPS?6.扩展计算单机可支撑PV(理论值)?1.什么是QP…

springboot中controller层接收参数,servers层调用mapper层,一条sql搞定排序

前言 很多小伙伴们在公司不管是测试C端产品还是B端产品,都会测到排序的业务需求;那么我们就会好奇排序是如何实现的呢?下面我们开始介绍代码的实现 数据库建表 我们需要创建一个书籍book表结构,如下图所示 CREATE TABLE book ( …

嵌入式C语言面向对象编程 --- 总结

什么是 C 语言面向对象? 在开始嵌入式 C 语言设计模式系列文章之前,先通过三篇文章讲述了如何使用 C 语言实现面向对象的三大特性,封装,继承,多态。 图片来源公众号:码农翻身 对于“面向对象”这个词语,相信很多软件工程师都不会感觉到陌生,并且很多软件工程师在刚开…

ABAP: 定义关键字的区别

问题:TYPE、LIKE、LIKE TABLE OF、LIKE LINE OF、TYPE TABLE OF 的区别? 1、TYPE 用于变量的类型定义,可以是表中预定义好的字段,也可以是C(字符),F(浮点型),I(整型)等。 例如: DATA: NAME TY…

Spring Cloud简介

一、什么是SpringCloud? Spring Cloud 是一系列框架的有序集合。 Spring Cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来。 通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理&#xff…

Python 图像边缘检测 | 利用 opencv 和 skimage 的 Canny 算法

文章目录一、简介二、opencv 实践三、skimage 实践CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、简介 提取图片的边缘信息是底层数字图像处理的基本任务之一。边缘信息对进一步提取高层语义信息有很大的影响。大部分边缘检测算法都是上个世纪的了&#xff0c…

【Java基础】day11

day11 一、BIO、NIO、AIO 三种 IO 模型分别是什么? BIO (Blocking I/O)同步阻塞的 I/O 、NIO(New/Non-blocking I/O) 同步非阻塞的 I/O 、AIO(Asynchronous I/O) 异步非阻塞的 I/O 。这三种 I…

前端例程20221227:下雪动画

演示 动图太大了不好上传&#xff0c;这里就放个静态图吧&#xff0c;实际上这里是雪花从上到下飘落的效果。 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&quo…

【Spring【AOP】】——20、搭建一个AOP测试环境?

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

Linux系统运行时参数命令--CPU性能监控

目录 2 CPU性能监控 2.1 平均负载和CPU使用率 1 平均负载基础 2 使用uptime命令分析平均负载 3 平均负载与 CPU 使用率 4 CPU使用率监测命令 ps查找进程信息 top命令查询进程的cpu、内存信息 mpstat pidstat 场景一&#xff1a;CPU 密集型进程 场景二&#xff1a;I…

嵌入式开发学习之--DMA(上)

提示&#xff1a;本篇文章主要了解学习一下DMA 文章目录前言一、DMA是什么&#xff1f;二、DMA使用步骤1、外设通道选择2.2、仲裁器2.3、FIFO2.4、存储器端口 外设端口2.5、编程端口三、DMA结构体初始化详解总结前言 上一篇文章学习了串口通信&#xff0c;这一篇我们来学习一下…

虹科案例 | 实现了新的核磁共振应用!(下)

摘要 光纤传感器已成为推动MRI最新功能套件升级和新MRI设备设计背后的关键技术。在这篇文章中&#xff0c;我们介绍了三个基于MRI的运动控制应用&#xff0c;展示了最近开发的、可在市场上买到的基于MRI的安全光纤反馈传感器的操作和使用。 案例研究 案例研究#1用于验证MRI技…

【聆思CSK6 视觉AI开发套件试用】体验AI功能

本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;YiCheng 很高兴极术社区和聆思科技举办的开发板申请试用活动&#xff0c;放张开箱图&#xff1a; 开发板介绍NanoKit开发板# NanoKit开发板是…

【算法】前缀和与差分

文章目录1.一维前缀和输入格式输出格式数据范围2.二维前缀和输入格式输出格式数据范围3.一维差分输入格式输出格式数据范围4.二维差分输入格式输出格式数据范围前缀和差分是一对逆运算1.一维前缀和 有一个长度为n的数组an:a1,a2…an; 对于前缀和&#xff1a;Si a1a2…ai 如何…

刷爆力扣之二进制求和

刷爆力扣之二进制求和 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&#xff0c;…

Spark零基础入门实战(八)Spark运行时架构

Spark有多种运行模式,可以运行在一台机器上,称为本地(单机)模式,也可以以YARN或Mesos作为底层资源调度系统以分布式的方式在集群中运行,称为Spark On YARN模式,还可以使用Spark自带的资源调度系统,称为Spark Standalone模式。 本地模式通过多线程模拟分布式计算,通常…