菜鸟笔记-python异常、包的基本了解

前言

  在Python中,异常是指程序中发生了错误或异常情况的情况。当Python程序遇到无法处理的代码时,会自动生成相应的异常并引发错误。为了捕获这些异常,并在出现问题时执行特定的操作,可以使用异常处理机制。(包括以下几个术语:异常、抛出异常、处理异常、重新抛出异常)

  Python中的包是一种组织Python模块的方式,它将代码划分为相关主题或功能。每个包都是一个装有相关模块和子包的目录,这些模块和子包在其内部共享命名空间。

创建一个包需要在文件系统中创建一个目录,并在该目录中放置一个名为 __init__.py 文件。这个文件是包的主要标识符,它可以包含任何初始化包或指定如何导入其他模块/子包的代码。

使用包的好处之一在于避免了命名冲突。通过将代码划分为多个模块和包,我们可以更容易地组织大型项目并管理其依赖关系,以及更容易地重用和维护代码。

 

 1.异常

(1)异常的捕获

  

捕获异常是通过使用try-except语句进行的。try语句块包含可能引发异常的代码;如果引发了异常,程序会跳转到与其类型匹配的except语句块,并且可以在该块中处理该异常。

以下是Python中try-except语句的基本语法:

try: 
# 代码段 

except ExceptionType: 
# 异常处理代码段

  在上述代码中,try后面的代码段是可能引发异常的代码;如果发生异常,控制权将转移到后面的except块,其中ExceptionType是异常的类型。

例如,下面是一个示例,演示如何使用try-except块捕获除以零错误:

try: 
    result = 10 / 0 
except ZeroDivisionError: 
    print('除数为 0!')

这里,try块中的代码试图将10除以0,这是一个明显的错误,在运行时抛出ZeroDivisionError异常,然后控制流进入except块。

Python还支持通过使用elsefinally子句来扩展try/except块。else代码块中的代码在没有引发任何异常时执行。finally代码块中的代码始终在try语句块退出之前执行(无论是否引发异常)。

以下是带有elsefinally子句的try语句块的示例:

try: 
# 可能引发异常的代码 

except ExceptionType: 
# 处理该异常的代码 

else: 
# 如果没有出现异常,则执行此处的代码 

finally: 
# 无论是否抛出异常,都会执行此处的代码段

 

(2)异常的传递性

  

  异常可以被传递到程序堆栈的上层,这通常称为“异常传播”或“异常传递性”。

当Python代码中的某个操作引发异常时,该异常将传递到调用当前函数的代码。如果异常未在该代码中处理,则它将继续传递到更高层次的调用者,直到遇到一个能够处理它的try/except语句或到达主程序并使其停止。

以下是一个演示异常传递性的例子:

def main_function(): 
    print("Main function starts.") 
    child_function() 
    print("Main function ends.") 
def child_function(): 
    print("Child function starts.") 
    try: 
        result = 10 / 0 
    except ZeroDivisionError: 
        print("Caught an exception.") 
    print("Child function ends.") 
main_function()

在上述代码中,当child_function尝试除以零时,将抛出ZeroDivisionError异常。然后,这个异常将在child_function中被捕获,并打印一条消息,但是它不会阻止控制流返回到main_function,并且最终导致所有函数正常结束。

  值得注意的是,如果遇到未经处理的异常并打算中止程序,则可以使用raise语句手动触发异常。raise语句允许显式引发特定类型的异常,并使程序停止执行,避免产生其他任何结果。

2.包

(1)模块的概念和导入

  模块是一个包含Python代码的文件。它们可用于将代码组织成逻辑单元以便更好地重用和管理。

使用模块可以方便地将功能分组到不同的文件中,并确保在应用程序中只需导入需要的部分。此外,模块还避免了名称冲突,因为每个模块都有自己的命名空间。

Python有许多内置模块,如mathrandom等库,这些模块提供了广泛的功能。此外,Python还支持创建自定义模块,使您可以在自己的应用程序中共享代码。

要导入模块,可以使用Python中的import语句。例如:

import math


print(math.pi)  # 输出圆周率,由math模块提供

这个例子演示了如何导入Python内置的math模块,并显示了如何在代码中使用该模块中的pi变量。

除了import语句之外,Python还支持其他导入语法,例如从模块中导入特定函数或变量,如下所示:

from math import pi



print(pi)

此示例仅从math模块中导入圆周率常量pi并打印其值。

还可以使用 as 关键字指定别名来导入模块或其中的特定功能,以更方便地引用它们,

import math as m



print(m.pi)  # 使用别名 m 引用模块中的 pi

这个例子演示了如何将 math 模块导入为别名 m 并在代码中使用新的别名引用其中的变量。

(2)自定义模块 

要创建和使用自定义模块,需要完成以下步骤:

 

        1.创建一个包含Python代码的.py文件作为模块。

例如,假设我们有一个名为 my_module.py 的模块文件,其中包含如下代码:

def greet(name):

    print(f"Hello, {name}!")

 

        2.使用import语句将模块导入到你的代码中。

import my_module



my_module.greet("Bob")  # 调用my_module模块中的greet函数

在这个例子中,我们导入了自定义模块my_module,然后调用它里面的greet()函数。

 

        3.也可以从模块中导入特定函数或变量。

from my_module import greet



greet("Alice")  # 导入函数并直接引用它

这个例子演示了如何只从my_module模块中导入greet函数,并直接引用它。这样做可以避免重复输入模块名称,提高代码效率。

注意,在创建模块时,应该尽可能保持模块代码的干净和可读性,以便其他人更容易理解和使用它们。同时,为模块编写文档字符串以清晰地记录其功能和用法是一个好习惯。

 

 (3)自定义包

  自定义包是一组Python模块和子包的集合,它们按照某种目录结构组织在一起。使用自定义包可以更好地组织和管理大型项目中的代码。 

要创建自定义包,需要进行以下步骤:

 

        1.创建一个目录作为包的根目录,并在该目录中放置一个名为__init__.py的空文件。这个文件告诉Python该目录应该被视为一个包,而不仅仅是一个普通的目录。

例如,假设我们创建了名为my_package的目录,并在其中创建了一个名为__init__.py的空文件。

 

        2.在包的根目录中创建一个或多个模块,并将它们保存在.py文件中。

例如,我们在my_package目录下创建一个名为my_module.py的模块。

 

        3.可以使用点号.符号从包中的模块中导入函数和变量。

例如,在你的代码中导入my_package中的my_module模块中的greet()函数,你可以这样写:

from my_package.my_module import greet greet("Alice")

  在这个例子中,我们通过点号.符号导入了来自my_package包中的my_module模块中的greet()函数,然后在代码中直接引用它。

注意,包也支持递归嵌套子包,只需在包根目录中创建另一个子目录并再次添加__init__.py。每个子包都可以包含其自己的模块和子包。

使用自定义包可以使代码更加模块化和清晰,以便更好地组织和复用。

(4)第三方包

  第三方包是由Python社区以外的开发人员或组织创建的Python模块和可重复使用的代码库。这些包可以大大扩展Python的功能,让您能够轻松地实现各种任务,如文本处理、数据分析、Web应用程序开发等等。

要使用第三方包,您需要进行以下步骤:

  1. 在终端中使用pip或conda等包管理器安装所需的包。

例如,在终端中执行以下命令将安装numpy包:

pip install numpy
  1. 在Python代码中导入所需的包,并使用其提供的函数和变量。

例如,在的代码中导入numpy包并使用它的random.rand()函数生成一个随机向量:

import numpy as np 


x = np.random.rand(5) 
print(x)

在这个例子中,我们导入了名为numpy的第三方包,并使用其提供的random.rand()函数生成了一个长度为5的随机向量x

请注意,在选择使用特定的第三方包时,建议您首先查看其文档和GitHub存储库,了解其功能、用法和支持的Python版本等信息,以确保其适合您的项目需求。此外,建议您只使用最新版本的第三方包,并定期升级以获得最新的功能和修复的漏洞。

 

                                                                                                                                     此致与君共勉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值