python——异常、模块、包

本文介绍了Python中的异常处理机制,包括try/except语句、else和finally子句以及如何主动抛出异常。接着,详细阐述了Python模块的分类、导入方式以及__all__和__name__变量的作用。最后,探讨了包的概念,包括包的创建、导入和使用,强调了包在组织大型项目中的重要性。
摘要由CSDN通过智能技术生成

前言:本文为小编自主学习python的过程中的笔记和对应的练习应用 ,希望能帮助到大家,也希望大家能一起交流学习。

目录

一、异常

1.捕获异常(try/except语句)

2.else和finally

3.主动抛出异常 raise

二、模块

1.模块分类

2.模块的导入方式

3.__all__变量

4. __name__变量(入口)

三、包


一、异常

Python使用 异常对象 来表示异常状态,并在遇到错误时 引发 异常。异常对象未被处理(或
)时,程序将终止并显示一条错误消息( traceback )。

1.捕获异常(try/except语句)

try / except 语句用于捕获异常。语法格式:
try:
    被检测的代码块
except 异常类型:
    try中一但检测到异常,就会执行这个位置的逻辑

如:

try:
    x = int(input('请输入被除数:'))
    y = int(input('请输入除数: '))
    print(x / y)
except ZeroDivisionError:
    print("除数不能为0")
如果你运行上述程序,并在提示时输入一个非数字值,将引发另一种异常,这是因为该程序中的except子句只捕获ZeroDivisionError异常,而这新的异常将成为漏网之鱼,导致 程序终止。为同时捕获这种异常,可在try / except 语句中再添加一个 except子句
try:
    x = int(input('请输入被除数:'))
    y = int(input('请输入除数: '))
    print(x / y)
except ZeroDivisionError:
    print("除数不能为0")
except ValueError:
    print("请输入数字")
如果要使用一个 except 子句捕获多种异常,可在一个元组中指定这些异常,如:
try:
    x = int(input('请输入被除数:'))
    y = int(input('请输入除数: '))
    print(x / y)
except (ZeroDivisionError, ValueError):
    print("请正确输入数字")

还能用万能异常

except Exception as e:  # 万能异常
    print(e)  # 报错详细信息
在上述代码中,如果用户输入除数为零或输入非数字值都将打印同样的错误消息。当然,仅仅打印错误消息帮助不大。另一种解决方案是不断地要求用户输入数字,直到能够执行除法运算为止。

2.else和finally

# else 代码不出现异常的时候执行的    放在except后面,可以省略的

# finally 代码无论有没有异常都会进行输出   finally一定要放到最后,可以省略的

try:
    print(name)
except Exception as e:
    print(e)
else: 
    print("成功获取到了数据")
finally: 
    print("成功执行了")

在这个代码里,因为已经出现异常所以只会执行except和finally里的代码,如果在这串代码前补上变量name对应的值,那么就会执行else和finally里的代码

3.主动抛出异常 raise

raise[exceptionName[(reason)]]

1.创建一个Exception的对象

2.raise抛出这个异常对象

def funa(age):
    if age<=0 or age>120:
        raise ValueError("值错误")
        print(123) 
    else:
        print(f"您的年龄为{age}")

# 捕获异常
try:
    funa(-18)
except ValueError as e:
    print(e)

 # raise 抛出错误,解释器不会主动捕获

# 这里注意到raise后面的语句是不会执行

二、模块

为了使代码更容易维护,提高代码重用价值,可以将一组相关功能的代码写入一个单独的py文件中供别人导入使用,这个.py文件就被称作是一个模块

1.模块分类

  • 内置模块

也叫标准库。此类模块就是python解释器给你提供的。不需要额外去下载,直接import导入就可以了,大约有200多个。

  • 第三方模块

第三方库。一些python大神写的非常好用的模块,必须通过pip install指令安装的模块。即需要下载然后再导入使用

  • 自定义模块

我们自己在项目中定义的一些模块,本质就是新建一个py文件在其他的文件中导入使用

2.模块的导入方式

有下面几种导入方式:

import 模块名

import 模块名 as 别名

import 模块名1,模块名2

from 模块名 import 函数名 [as 别名]

from 模块名 import *

 例如现自定义一个py文件,命名为demo.py 其内容如下:

a = 10
print(a)
def funa():
    print("123")

funa()

 然后我们在另一个新的py文件中运行一下代码

# import 模块名
import demo  #  加载文件,自动执行demo模块的功能

# 还可以通过模块名.的方式去使用
print(demo.a) # 输出demo文件a属性
demo.funa() # 调用demo文件funa()函数

 还可以对导入的模块进行改名字来方便自己运用

# import 模块名 as 别名
import demo as de
# 别名.的方式去调用
print(de.a)
de.funa()

下面再创建一个名为demo2.py的文件,内容如下

print('hello word')

然后我们使用方法3,就可以同时导入2个模块且自动执行了

# import 模块名1,模块名2
import demo,demo2

下面重新定义demo文件内容

a = 10
def funa():
    print("123")

 然后通过方法4导入里面的函数funa

# from 模块名 import 函数名 [as 别名]
from demo import funa # 从模块中导入某个函数
funa()

而as是导入函数后对函数取别名

# from 模块名 import 函数名 as 别名
from demo import funa as fa # 从模块中导入某个函数,同时取别名
fa()
# from 模块名 import *   从模块里面导入所有
from demo import *
funa()
print(a)

3.__all__变量

__all__ 变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称。通过在模块文件中设置 __all__ 变量,当其它文件以“ from 模块名 import * ”的形式导入该模块时,该文件中只能使用 __all__ 列表中指定的成员

a = 10
def funa():
    print("123")
__all__  = ["a"] # 变量和函数名都需要用双引号包裹起来
# 当其他文件导入这个文件只允许a这个变量可以使用

ps:import导入某个模块的整个功能,from.....import....导入模块的某个功能

 py文件的两种功能:

  1. 脚本,一个文件就是整个程序,用来被执行
  2. 模块,文件中存放着一堆功能,用来被导入使用

4. __name__变量(入口)

是python的内置变量。它是每个python模块必备的属性,它的值取决于你是如何执行这段代码的。

print(__name__)

但你运行这个代码时,如果打印出的是__main__,说明你运行的是当前文件。

如果你是在其他文件导入了这个模块,运行后将打印出导入的文件块名

  • if __name__  == "__main__": 当其他文件导入这个文件的时候这个里面的代码不执行
print(__name__)  # 如果打印出了__main__,就说明运行的是当前文件

print(123)
if __name__  == "__main__": # 当前文件运行的代码
    print(456)

快捷方式:main 回车 就可以快速编写   if __name__  == "__main__":

三、包

包是一个有层次的文件目录结构,它定义了由n个模块和n个子包

具体表现形式:包含__init__.py文件的目录,这个目录下一定得有这个__init__.py文件和其他模块或子包

为什么要使用包?

随着功能越写越多,我们无法将所以功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性

在python工程里,当python检测到一个目录下存在__init__.py文件时,python就会把它当成一个模块(module)

注意:__init__.py可以是一个空文件

创建方法:右键-new-python package创建一个包,包里面包含一个__init__.py文件,默认会执行这个文件

如:创建了一个包,名为bao,在这个文件夹里面创建一个py文件,名为test,里面内容如下

print(123)

然后我们就可以在一个新的py文件中导入它了,方法为

import bao

 如果test文件内容改为

a = 10
def funa():
    print("hello")

 那么可以导入包里的具体文件,并使用具体的内容

from bao import test
test.funa()
print(test.a)

 也可以对那个文件进行取别名

import bao.test as test1
test1.funa()
print(test1.a)

还可以用如下方法,不过需要在__init__.py文件去设置__all__,否则会报错。__all__列表里写对应的py文件名

from bao import * 
test.funa()
print(test.a)

:可以理解为包的集合

库>包>模块

如有哪些地方写错,欢迎纠正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值