Python异常、模块和包

Python异常、模块和包

  • 1.了解异常
  • 2.异常的捕获方法
  • 3.异常的传递
  • 4.Python模块
  • 5.Python包

1.了解异常

1.1什么是异常
当检测到一个错误是,Python解释器就无法继续执行了,发而出现了一些错误提示,这就是所谓的“异常”,也就是我们常说的BUG。
在这里插入图片描述
1.2bug单词的诞生
早期计算机采用大量继电器工作,马克二型计算机就是这样的。

1945年9月9日,下午三点,马克二型计算机无法正常工作了,技术人员试了很多办法,最后定位到第70号继电器出错。负责人哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”自此之后,引发软件失效的缺陷,便被称为Bug。

在这里插入图片描述
在这里插入图片描述
1.3异常演示
在这里插入图片描述

2.异常的捕获方法

2.1为什么要捕获异常
世界上没有完美的程序,任何程序在运行的过程中,都有可能出现:异常,也就是出现bug
导致程序无法完美运行下去。

我们要做的,不是力求程序完美运行。
而是在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。

这种行为我们称之为:异常处理(捕获异常)
当我们的程序遇到了BUG, 那么接下来有两种情况:
- ① 整个程序因为一个BUG停止运行
- ② 对BUG进行提醒, 整个程序继续运行

显然在之前的学习中, 我们所有的程序遇到BUG就会出现①的这种情况, 也就是整个程序直接奔溃.
但是在真实工作中, 我们肯定不能因为一个小的BUG就让整个程序全部奔溃, 也就是我们希望的是达到② 的这种情况
那这里我们就需要使用到捕获异常

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

2.2捕获常规异常
基本语法

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

快速入门
需求:尝试以“r”模式打开文件,如果文件不存在,则以“w”方式打开。

try:
    f = open('linux.txt','r')
except:
    f = open('linux.txt','w')

2.3捕获指定异常
基本语法

try:
    print(name)
except NameError as e:
    print("name变量未定义")
  • 如果尝试执行的代码的异常类型和要捕获的异常类型不一样,则无法捕获。
  • 一般try下方只放行一行尝试执行的代码。
    2.4捕获多个异常
    当捕获多个异常时,可以吧要捕获的异常类型的名字,放到except后,并使用元组的方式进行书写。
try:
    print(1/0)
except (NameError, ZeroDivisionError):
    print('ZeroDivision错误...')

在这里插入图片描述
2.5捕获异常并输出描述信息
基本语法

try:
    print(1/0)
except (NameError, ZeroDivisionError) as e:
    print(e)

在这里插入图片描述
2.6捕获所有异常
基本语法

try:
    print(name)
except Exception as e:
    print(e)

在这里插入图片描述
2.7异常else
else表示的是如果没有异常要执行的代码

try:
    print(1)
except Exception as e:
    print(e)
else:
    print("我是else,是没有异常的时候执行的代码")

在这里插入图片描述
2.8异常的finally

try:
    f = open('test.txt', 'r')
except Exception as e:
    f = open('test.txt', 'w')
else:
    print('没有异常,真开心')
finally:
    f.close

3.异常的传递

3.1异常的传递
异常是具有传递性的
函数func01中发生异常,并且没有捕获处理这个异常的时候,异常会传递到函数func02,当func02也没有捕获处理这个异常的时候main函数会捕获这个异常,这就是异常的传递性
提示:当所有函数都没有捕获异常的时候,程序会报错
在这里插入图片描述
利用异常具有传递性的特点,当我们想要保证程序不会因为异常崩溃的时候,就可以在main函数中设置异常捕获,由于无论在整个程序哪里发生异常,最终都会传递到main函数中,这样就可以确保所有的异常都会被捕获
在这里插入图片描述

4.Python模块

4.1模块的导入
什么是模块?
Python模块,是一个Python文件,以.py结尾模块能定义函数,类和变量,模块历也能包含可执行的代码。
4.2模块的作用

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

4.3模块的导入方式
模块在使用前需要先导入,导入的语法如下:
[from 模块名] import [ 模块 | 类 | 变量 | 函数 | *] [ as 别名]
常用的组合形式如:

  • import 模块名
  • from 模块名 import 类、变量、方法等
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

4.3.1import模块名
基本语法

import 模块名
import 模块名1,模块名2
模块名.功能名()

案例:倒入time模块

#导入时间模块
import time
print("开始")
#让程序睡眠1秒(阻塞)
time.sleep (1)
print("结束")

4.3.2from 模块名 import 功能名
基本语法

from 模块名 import 功能名

案例:倒入time模块中的sleep方法

#倒入时间模块中的sleep
from time import sleep
print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

4.3.3from 模块名 import *
基本语法

from 模块名 import *
功能名()

案例:导入time模块中所有的方法

#导入时间模块中所有的方法
from time import *
print("开始")
#让程序睡眠1秒(阻塞)
sleep(1)
print("结束")

4.3.4as 定义别名
基本语法

# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名

案例:

#模块别名
import time as tt
tt.sleep(2)
print("Hello")
#功能别名
from time import sleep as sl
sl(2)
print("Hello")

4.4注意事项

  • from可以省略,直接import即可
  • as别名可以省略
  • 通过"."来确定层级关系
  • 模块的导入一般写在代码文件的开头位置

4.5自定义模块
4.5.1制作自定义模块
Python中已经帮我们实现了很多的模块. 不过有时候我们需要一些个性化的模块, 这里就可以通过自定义模块`实现, 也就是自己制作一个模块
案例:新建一个python文件,命名为my_module1.py,并定义test函数
在这里插入图片描述

注意:每个python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块要符合标识符命名规则
4.5.2测试模块
在实际开发中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,
这个开发人员会自行在py文件中添加一些测试信息,例如,在my_module1.py文件中添加测试代码test(1,1)
在这里插入图片描述
问题:此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行test函数的调用
解决方案
在这里插入图片描述
4.5.3注意事项
在这里插入图片描述
注意事项:当导入多个模块的时候,且模块内有同名功能. 当调用这个同名功能的时候,调用到的是后面导入的模块的功能

4.5.4__all__
如果一个模块文件中有__all__变量,当使用from xxx import *导入时,只能导入这个列表中的元素
在这里插入图片描述

5.Python包

5.1什么是第三方包
我们知道,包可以包含一堆的Python模块,而每个模块又内含许多的功能。
所以,我们可以认为:一个包,就是一堆同类型功能的集合体。

在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:

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

这些第三方的包,极大的丰富了Python的生态,提高了开发效率。
但是由于是第三方,所以Python没有内置,所以我们需要安装它们才可以导入使用哦。
5.2安装第三方包 - pip
第三方包的安装非常简单,我们只需要使用Python内置的pip程序即可。

打开我们许久未见的:命令提示符程序,在里面输入:
pip install 包名称
即可通过网络快速安装第三方包
在这里插入图片描述
5.3pip网络优化
由于pip是连接的国外的网站进行包的下载,所以有的时候会速度很慢。

我们可以通过如下命令,让其连接国内的网站进行包的安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
在这里插入图片描述
练习
在这里插入图片描述

def str_reserver(s):
    """
功能是将字符串反转
    :param s: 被反转的字符串
    :return: 反转后的字符串
    """
    return s[::-1]

def substr(s,x,y):
    """
    功能是按照给定的下标完成字符串的切片
    :param s: 即将被切片的字符串
    :param x: 切片的开始下标
    :param y: 切片的结束下标
    :return: 切片完成后的字符串
    """
    return s[x:y]
if __name__ == '__main__':
    print(str_reserver("黑马程序员"))
    print(substr("黑马程序员",1,3))

#file_util.py
def print_file_info(file_name):
    """
    功能是:将给定的路径文件内容输出到控制台中
    :param file_name: 即将读取的文件
    :return: None
    """
    f =None
    try:
        f = open(file_name,"r",encoding="UTF-8")
        content = f.read()
        print("文件内容如下:")
        print(content)
    except Exception as e:
        print("程序出现异常,异常是{e}")
    finally:
        if f:   # 如果变量是None,表示False,如果有任何内容,就是True
            f.close()

def append_to_file(file_name,data):
    """
    功能是将指定的数据追加到指定的文件中
    :param file_name: 指定的文件路径
    :param data: 指定的数据
    :return: None
    """
    f = open(file_name,"a",encoding="UTF-8")
    f.write(data)
    f.write("\n")
    f.close()

if __name__ == '__main__':
    append_to_file("D://test_append","传智教育")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

橡胶塑料企业网站建设的作用是什么

橡胶塑料产品一般属于大额交易,对企业来说,需要不断提升品牌和拓客,但如今线下信息传播力不足,难以全面呈现内容,需要商家不断提升线上能力,获得进一步发展。 1、品牌宣传展示难 线上没有自己的平台难以将…

HTML---列表.表格.媒体元素

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.列表 无序列表 HTML中的无序列表&#xff08;Unordered List&#xff09;用于显示一组项目&#xff0c;每个项目之前没有特定的顺序或编号。无序列表使用<ul>标签来定义&#xff0c;每…

MTK Android P Sensor架构(一)

需求场景&#xff1a; 本来如果只是给传感器写个驱动并提供能读取温湿度数据的节点&#xff0c;是一件比较轻松的事情&#xff0c;但是最近上层应用的同事要求我们按照安卓标准的流程来&#xff0c;这样他们就能通过注册一个服务直接读取传感器事件数据了。这样做的好处就是第…

初始数据库 - 了解数据库

centos 7 版本当中安装 mysql 安装与卸载中&#xff0c;⽤⼾全部切换成为root&#xff0c;⼀旦 安装&#xff0c;普通⽤⼾是可以使用的。 卸载不需要的环境 首先&#xff0c;在安装之前&#xff0c;要先确定你当前系统当中是否已经有了mysql 的环境&#xff0c;如果你不想卸…

1838_emacs_evil中跳转到任意字符evil-avy-goto-char的功能分析

Grey 全部学习内容汇总&#xff1a;GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 1838_emacs_evil中跳转到任意字符evil-avy-goto-char的功能分析 avy是一个比较成熟的emacs的插件&#xff0c;可以实现快速跳转到指定的字符位置的功能…

数据在网络中是怎么传输的?

计算机通信场景大致如下所示&#xff1a; 1.同一个子网中两台计算机通信 2.不属于同一个子网&#xff0c;两台计算机进行通信 以下内容&#xff0c;将围绕这两种场景进行阐述&#xff0c;在阐述之前&#xff0c;先举个场景示例&#xff0c;帮助大家理解一些名词 场景一&…

机器学习---Boosting

1. Boosting算法 Boosting思想源于三个臭皮匠&#xff0c;胜过诸葛亮。找到许多粗略的经验法则比找到一个单一的、高度预 测的规则要容易得多&#xff0c;也更有效。 预测明天是晴是雨&#xff1f;传统观念&#xff1a;依赖于专家系统&#xff08;A perfect Expert) 以“人无…

Reinfocement Learning 学习笔记PartⅠ

文章目录 Reinfocement Learning一、基本概念二、贝尔曼公式&#xff08;bellman equation&#xff09;2.1 为什么return重要2.2 state value function的定义2.3 贝尔曼公式推导2.4 如何求解贝尔曼公式2.5 Action value的定义 三、贝尔曼最优公式&#xff08;bellman optimalit…

HarmonyOS—实现UserDataAbility

UserDataAbility接收其他应用发送的请求&#xff0c;提供外部程序访问的入口&#xff0c;从而实现应用间的数据访问。Data提供了文件存储和数据库存储两组接口供用户使用。 文件存储 开发者需要在Data中重写FileDescriptoropenFile(Uriuri,Stringmode)方法来操作文件&#xf…

在做题中学习(32):只出现一次的数字 III

260. 只出现一次的数字 III - 力扣&#xff08;LeetCode&#xff09; 根据题目可知&#xff1a;有两个元素只出现一次&#xff0c;其余出现两次。 而在只出现一次的数字 I 里&#xff0c;只有一个元素出现一次&#xff0c;可以用异或的方式直接得到最后的答案&#xff0c;而此…

PaddleOCR:超越人眼识别率的AI文字识别神器

在当今人工智能技术已经渗透到各个领域。其中&#xff0c;OCR&#xff08;Optical Character Recognition&#xff09;技术将图像中的文字转化为可编辑的文本&#xff0c;为众多行业带来了极大的便利。PaddleOCR是一款由百度研发的OCR开源工具&#xff0c;具有极高的准确率和易…

Linux嵌入式配置USB鼠标支持+触摸板

在linux嵌入式中加入鼠标支持&#xff0c;首先在内核里面将mice驱动加入编译&#xff0c;这里用到的是usb所以还要有usb的支持&#xff0c;下载到板子上启动 1、定位鼠标 要用鼠标&#xff0c;首先要知道生成的鼠标设备是哪个&#xff0c;直接直接ls input目录&#xff0c;当…

2023.12.6-12.11 黑马知行教育项目实战,访问咨询意向线索主题

目录 简单介绍: 一.项目背景介绍 二.项目架构介绍 三.项目内容 3.1访问和咨询分析主题: 3.1.1 表与表之间的关联 3.1.2访问咨询主题需求汇总:最终需在ADS层制作六张表 3.1.3 访问咨询DWS大宽表建表与导入数据 3.2意向线索主题需求分析 3.2.1意向线索主题需求汇总:最终需在…

【数据结构(六)】希尔排序、快速排序、归并排序、基数排序的代码实现(3)

文章目录 1. 希尔排序1.1. 简单插入排序存在的问题1.2. 相关概念1.3. 应用实例1.3.1. 交换法1.3.1.1. 逐步推导实现方式1.3.1.2. 通用实现方式1.3.1.3. 计算时间复杂度 1.3.2. 移动法 2. 快速排序2.1. 相关概念2.2. 实例应用2.2.1. 思路分析2.2.2. 代码实现 2.3. 计算快速排序的…

华清远见作业第二十五天

使用三个程序来完成输出ABCABCABCABCABC #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/sem.h>#define NUM_SEMS 3 // 信号量集中的信号量数量union semun {int val;struct semid_ds *…

隔离电源与非隔离式电源

开关电源 文章目录 开关电源前言一、它们之间的区别是什么&#xff1f;二、如何区分它们呢&#xff1f;三、隔离电源与非隔离电源的优缺点四、隔离电源与非隔离电源的选择总结 前言 在产品设计时&#xff0c;倘若没有考虑应用环境对电源隔离的要求&#xff0c;产品到了应用时就…

Linux服务器安装vim命令

1、查看是否安装vim命令 vim /etc/hosts2、检查系统中是否存在安装包 rpm -qa|grep vim2、 安装vim yum -y install vim*4、测试是否安装成功 vim /etc/hosts

深度学习——第3章 Python程序设计语言(3.7 matplotlib库)

3.7 matplotlib库 目录 1 matplotlib库简介 2 pyplot的plot函数 3 matplotlib基础绘图函数示例 数据可视化有助于深度理解数据。 本节介绍绘制图形的基本方法。 1. matplotlib库简介 matplotlib官网 1.1 matplotlib库概述 matplotlib是Python优秀的数据可视化第三方库&a…

Python 神奇解码器:pyWhat 库全面指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在当今数字化的世界中&#xff0c;理解和处理文本数据是许多应用程序的关键任务。而PyWhat库作为一个用于处理文本的Python库&#xff0c;提供了强大的功能&#xff0c;帮助开发者在文本中识别和提取有意义的信息…

【Qt开发流程】之2D绘图1:概述及基本绘制与填充和渐变填充

概述 Qt的绘图系统可以使用相同的API在屏幕和打印设备上进行绘图&#xff0c;并且主要基于QPainter, QPaintDevice和QPaintEngine类。 QPainter用于执行绘图操作&#xff0c;QPaintDevice是一个二维空间的抽象&#xff0c;可以使用QPainter在其上绘制&#xff0c;QPaintEngine…