python之路 第八章 python异常、模块与包——了解异常、异常的捕获方法、异常的传递性、python模块、python包

2023-10-28

目录

第八章 python异常、模块与包

01 了解异常

02 异常的捕获方法

 为什么我们要去捕获异常?

          如何捕获异常

03 异常的传递性

04 Python模块

什么是模块

模块的导入

自定义模块

05 Python包

什么是Python包

如何自定义包

导入包的方式

06 安装第三方Python包

什么是第三方Python包?

如何去安装第三方包?

07 综合案例


第八章 python异常、模块与包

01 了解异常

       什么是异常呢?我们经常说:程序员天天的工作就是打代码,修BUG,继续修BUG,而这里的BUG我们就可以说是"异常"。

df01437573ec4d4fabbf75db4c2da49b.png

       BUG在微软翻译上是错误的意思,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象。 

       这还得说回1945年,计算机还是由机械式继电器和真空管驱动的,机器有房间那么大。体现当时技术水平的MarkⅡ,是由哈佛大学制造的一个庞然大物。当技术人员正在进行不整机运行时,它突然停止了工作。他们爬上去找原因,发现这台巨大的计算机内部一组继电器的触点之间有一只飞蛾,这显然是由于飞蛾受光和热的吸引,飞到了触点上,然后被高电压击死。史上的第一只 "Bug" ,真的是因为一只飞蛾意外走入一电脑而引致故障,因此Bug从原意为臭虫引申为程序错误。e37e37d8064a460f80e8d7d4092cd8c8.jpeg

        与Bug相对应,人们将发现Bug并加以纠正的过程叫做“Debug”(中文称作“调试”),意即“捉虫子”或“杀虫子”。


02 异常的捕获方法

 为什么我们要去捕获异常?

       世界上不可能会有完美的程序,在B站上,有人会调侃"代码和我,只要有一个能跑起来就行""只要你的代码能跑起来,就不要去轻易的修改"。所以,我们要做的,不是力求程序的完美运行,而是要在力所能及的范围内,对可能出现的bug,进行提前准备、提前处理。这种行为,我们称之为:异常处理(捕获异常)

       当我们的程序遇到了bug,那么接下来会有两种情况

                     1.整个程序因为一个bug而停止运行

                     2.对bug进行提醒整个程序继续运行

       显然在之前的学习中,我们所有的程序遇到bug就会出现1这样的情况,也就是整个程序直接崩溃。但是在真实的工作中,我们肯定不能因为一个小小的bug就让程序全部崩溃,也就是我们希望的是达到2这种情况。那这里我们就需要使用到:捕获异常。捕获异常的作用就在于提前假设某处会出现异常,做好提前准备,当真的出现异常的时候可以有后续手段。

如何捕获异常

1.捕获异常

基本语法

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

 演示

156e061f27cf4dd58b522797fec842cb.png

此时并未出现text.txt

31c167771183429fab6442c9556314ae.png

运行

365a22ea19fd4bad8612b0e6b9c6a117.png

没报错,并且执行了except部分的代码

 2.捕获指定异常

基本语法

try:
    print(name)
except NameError as e:    #e是别名,随意定义
    print('name变量名称为定义错误')

50a3ee04949948609f0d81e8f4896bbb.png

 #注意:1.如果尝试执行的代码的异常类型和要补货的异常类型不一致,则无法捕获异常。

              2.一般try下方只放一行尝试执行的代码。

3.捕获多个异常

基本语法

​try:
    print(1/0)
except (NameError,ZeroDivisionError):
    print('name变量名称为定义错误')

f2ac2d3e61584823bc6ef714306ec53f.png

4.捕获全部异常

语法:

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

       你可能会感觉到疑惑,这不是最开始、最简单的异常捕获方法吗,怎么就能够捕获所有异常?但是你仔细想一下,一开始的捕获异常并没有对异常类型作出限定,我们变相理解一下,是不是就是能捕获任意类型的异常,也就是这么演示的:f91f87b9e9084218add48518b2891a02.png

       可以看到,无论是语法捕获还是数学异常都会被捕获到 。

       还有一种语法可以捕获到全部的异常

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

       两者作用相同,这里就不再做演示。在实际应用中,我们更加推荐第一种语法,因为更加简便且效果大差不差。

5.异常else语句

       else表示的是如果没有异常发生时要去执行的代码。

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

693f88044de34d59a42a0c67a19d6a9a.png

6.异常finally语句

       finally表示的是,无论是否异常都要去执行的代码,例如关闭文件。

try:
    f = open('test.txt','r')
except:
    f = open('test.txt','w') 
else:
    print("没有异常,睡去吧")
finally:
    f.close()

12d097d0186b45eba6421cc10f8df1cf.png


03 异常的传递性

       异常是具有传递性的,当函数A中发生异常,并且没有捕获处理这个异常的时候,异常会传递到使用A函数的B函数中,当B函数也没有捕获处理这个异常的时候,异常会传递到使用B函数的main函数中,当main函数执行时,main函数就会捕获这个异常,这就是异常的传递性。08e53adc1ab84d758d91ac95ded1eb65.png

#注意:当所有函数都没有捕获处理这个异常时,那么程序就会进行报错。 4f1a313a24b040b98ca1790981bf9e66.png


04 Python模块

什么是模块

       Python模块(Module),是一个Python文件,以.py结尾。模块能定义函数,模块里也能包含可执行的代码。

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

模块的导入

方式:[from 模块名] import [模块 | 类 | 变量 | 函数 | *][as 别名]

注意:加入中括号为可选的意思,可以写也可以不写。*表示导入模块内全部的内容。

常用的组合形式有:

1.import 模块名

语法:

import 模块名
import 模块1,模块2

功能:导入某个模块,其中的所有功能任意使用

 2. from 模块名 import 类、变量、方法等

语法:

from 模块名 import 功能名
功能名()

功能:仅使用某个模块中的某个功能或引用某个方法、类等。

那么上述的代码就能这样表示

 3. from 模块名 import *

语法:

from 模块名 import *
功能名()

功能:指将某个模块中的所有功能全部导入,与上文第一种方法功能一致,仅写法有区别。

 4.模块定义别名

语法:import 模块名 as 别名

 5. 功能定义别名

语法:from 模块名 import 功能名 as 别名

自定义模块

具体如何自定义?

         与我们正常创建文件相同,只需要在Python文件中定义好函数,在需要引用的文件中利用import或是from引用就可以了。

#注意:1.每个Python文件都可以作为一个模块,模块的名字就是文件的名字,也就是说自定义模块名必须要符合标识符命名规则

                2.同时导入多个模块且模块内有同名功能,当调用这个同名功能的时候,后调入的功能会直接将先一步调入的功能直接覆盖掉,最后调用到的是后面导入的模块的功能。

__main__变量

语法:if __main__ == "__main__"

作用:只有当程序是直接执行时才会进入if内部,如果是被导入的,if无法进入

__all__变量

作用:控制"from xxx import"时那些功能可以导入,如果一个模块文件有__all__变量,当使用'from xxx import *'导入时,只能导入这个列表中的元素。

语法:__all__ = [指定函数名]


05 Python包

什么是Python包

         基于Python模块,我们可以在编写代码的时候导入许多外部的代码来丰富功能。但是如果导入的模块太多,就可能造成一定的混乱,那么如何进行管理呢?

         从物理上看,包就是一个文件夹,在该文件夹下包含了一个 __init__. py 文件,这个文件可以为空,但必须存在。该文件夹可用于包含多个模块文件。

         从逻辑上看,包的本质依然是模块。是将将各个包结合在多个模块下组成一个Python包。

         包的作用:当我们的模块文件越来越多时,包可以帮助我们管理这些模块。包的作用就是包含多个模块,但包的本质依然是模块。

如何自定义包

快速入门,步骤如下:

1.新建包'my_package'

2. 新建包内模块'my_module'

Pyhcharm中的基本步骤

[New] -> [Python Package] -> 输入包名 -> 新建功能模块(有联系的模块)

#注意:新建包括包内部会自动创建 __init__. py 文件,这个文件控制着包的导入行为。

导入包的方式

1.import 包名. 模块名

  包名. 模块名. 功能

 通过上述的方式,包就被导入成功了

2.from 包名 import 模块

   模块. 功能

 3. from 包名. 模块 import 功能

    功能

 4. from 包名 import *

    模块名. 功能

 #注意:必须在 '__init__. py' 文件中添加 '__all__ = [ 模块名 ]' 控制允许导入的模块列表。并且 __all__ 针对的是 'from... import *' 这种方式,对 'import xxx' 这种无效。


06 安装第三方Python包

什么是第三方Python包?

         我们知道,包可以包含一堆的python模块,而每个模块又包含许多的功能。所以,我们可以认为:一个包,就是一堆同类型功能的集合体。

         在python程序的生态中,有许多的第三方python包可以极大的帮助我们提高开发效率。如:科学计算中常用的numpy包;数据分析中常用的pandas包;大数据计算中常用的pyspark、apache-flink包;图形可视化常用的matplotlib、pyecharts;人工智能常用的tensorflow等等。

         这些都是第三方包,极大的丰富了Python的生态,提高了开发效率。但是由于是第三方,Python内部没有内置,所以我们需要安装他们才可以导入使用。

如何去安装第三方包?

         第三方包的安装十分简单,我们只需要使用Python内置的php程序即可。

1. pip安装

              打开我们许久未见的命令提示符, 在里面输入: pip install 包名称,就可以通过网络快速安装第三方包。同样我们也可以应用这种方式打开pip:python.exe -m pip install 包名称

              另外,我们还有一些常用的命令:

    pip list 显示已安装包     pip uninstall 包名 卸载包

    Ctrl + C 停止当前命令

    pip网络优化

             由于pip是直接通过国外的网站连接进行包的下载,所以有的时候下载速度会很慢。

             我们运用以下命令让其连接国内的网站进行包的安装。

pip install -i https: //pypi.tuna.tsinghua.edu.cn/simple  包名称

     https: //pypi.tuna.tsinghua.edu.cn/simple 是清华大学提供的网站, 可供pip程序下载第三方包。

    下载成功提示

     Installing collected packages:  包名

    Successfully  installed 包名-版本号

2.Pycharm安装第三方包


07 综合案例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python之路 第八章 python异常、模块与包——了解异常、异常的捕获方法、异常的传递性、python模块、python包 的相关文章

  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐