Py 异常、模块与包

Py 异常、模块与包

一、异常

在我们写的程序中,因为语法、逻辑等原因,会出现错误,当检测到错误时,Python解释器就无法运行了,这个错误就是我们常说的BUG,也叫异常。

异常的捕获

当程序遇到BUG时,程序一般会直接停止运行,而当我们对异常进行捕获并作出相应的措施后,能够让程序继续运行,从而防止因为一个异常而导致程序崩溃。

即我们可以通过提前假设异常会出现的地方,对异常进行捕获并给出补救措施,保证程序的正常运行。

捕获常规异常

语法:

try:
	可能出现异常的语句
except:
	出现异常时进行的操作

示例:

# 基本捕获语法
try:
    f = open("E:/Python/Data/20231107/test.txt", "r", encoding="UTF-8")
    # 此时文件是不存在的,即无法以r模式打开文件
except:
    f = open("E:/Python/Data/20231107/test.txt", "w", encoding="UTF-8")
    # 出现异常(无论什么异常)时,except起作用
捕获指定类型的异常

语法:

try:
	可能出现异常的语句
except 异常类型 as 变量名:
	出现异常时进行的操作
	# 可通过打印变量名输出异常类型
捕获多种类型的异常

可以通过在excep后面用元组的方式添加多个异常类型,进行对多种异常的捕获

语法:

try:
	可能出现异常的操作
except(异常类型1,异常类型2, ...):
	出现异常时进行的操作
捕获所有异常

语法:

try:
	可能出现异常的操作
expect Exception as 变量名:
	出现异常时进行的操作

Exception属于顶级异常,即捕获它相当于捕获所有异常

其实基础语法也可以

异常 else

else 表示没有异常时进行的操作

语法:

try:
	可能出现异常的操作
except:
	出现异常时进行的操作
else:
	没有出现异常时进行的操作
异常finally

finally表示有没有异常都要进行的操作,比如关闭文件等

语法:

try:
	可能出现异常的操作
except:
	出现异常时进行的操作
else:
	没有出现异常时进行的操作
finally:
	有没有异常都进行的操作

异常的传递

异常是具有传递性的,可以在函数间传递,当所有函数都没有捕获异常的时候,程序就会报错

def func1():
    print("func1 start")
    num1 = 1 / 0
    # 出现异常:0为分母

def func2():
    print("func2 start")
    func1()
    # 异常传递到func2

def func3():
    print("func3 start")
    try:
        func2()
        # 异常传递到func3
        # 这里如果不捕获异常,则整个程序会报错
    except Exception as e:
        print("error")
        print(e)

func3()

# 输出func3 start
# func2 start
# func1 start
# error
# division by zero

二、模块

Python中的模块其实就是一个以.py结尾的python文件,里面可以定义函数、类和变量等

每一个模块就相当于一个工具箱,通过在程序中导入模块可以直接调用模块中的类、函数等

模块的导入

语法:

[from 模块名] import [模块||变量|函数|*] [as 别名]

[]中的为可选项

import导入模块

语法:

语法1import 模块名
语法2import 模块1, 模块2

示例:
import time
time.sleep(5)

(在pycharm中,导入模块后,按住ctrl左键点击模块名可以打开模块对应文件)

通过. 可以使用模块内的全部功能(类、函数、变量)

from 模块名 import 功能名

语法:

from 模块名 import 功能名

示例:
from time import sleep
sleep(5)

只导入某个功能,此时可以直接写方法名,不用加.

from 模块名 import *

可以导入模块中的所有方法

as定义导入的模块的别名
import 模块名 as 别名
from 模块名 import 功能名 as 别名

可以将导入的模块、功能进行重命名,方便使用

自定义模块

除了Python中已经有的模块,我们可以根据自己的需求定义自己的模块

每一个Python文件都可以作为一个模块,模块的名字就是文件名(不包括.py后缀)

# 新建一个名为my_mode的.py文件,放入下面的代码
def test(a, b):
    return a + b

# 在原文件中调用my_mode
import my_mode
ret = my_mode.test(1, 2)
print(ret)
# 输出3

注意:当导入多个模块,且有多个模块中具有相同的功能名,当调用这个功能的时候,会调用后面导入的模块的功能

from my_mode import test
from my_mode2 import test
# 在pycharm中,写入下面这行代码是,第二行导入代码会亮起,即它被使用了
ret = test(1, 2)
print(ret)

# my_mode内的代码
def test(a, b):
    return a + b
    
# my_mode2内的代码
def test(a, b):
    return a - b
    
# 输出 -1
测试模块

当我们在制作模块时,常常需要对模块的功能进行测试,例如:

def func1()print(1 + 2)
    
func1()

如果在导入模块是保持这样的写法,那么在导入模块时,函数func1会直接执行一次,对程序造成影响

解决方法:

  • 将用于测试的代码删除
  • 通过添加特殊语句,使得测试代码只在测试时被调用

语法:

if__name__ == '__main__':
	需要执行的语句
def test(a, b):
    return a + b

if __name__ == '__main__':
    # __name__ 是一个内置变量,当程序运行时,__name__会被命名为__main__
    # 而当mode被导入是,__name__则不会被命名为__main__
    test(1, 2)
__all__

如果一个模块中有 __all__ 变量,当我们使用 from 模块名 import * 导入模块时,将只能导入这个列表中的元素

语法:

__all__ = [功能1, 功能2, ...]

三、包

Python包就是一个包含有 __init__.py文件的特殊文件夹,可以包含有多个模块,有利于对模块的管理

(如果没有__init__.py 文件,就是个普通文件夹)

自定义包

在pycharm中,右键项目所在的文件夹,选择新建 Python Package (汉化插件下显示为:Python 软件包)

然后将模块放入包,或在包内创建模块即可

导入包

语法:

语法1:
import 包名.模块名
调用语法:包名.模块名.功能名

语法2:
from 包名 import 模块名
调用语法:模块名.功能名

语法3:
from 包名 import *
注意:此时需要在__init__.py文件中添加语句'__all__' = [模块1, 模块2, ...]用于控制允许导入的模块
调用语法:模块名.功能名

安装第三方包

在Python的生态中,有许多第三方(非Python官方)包,如pandas、numpy等,可用于帮助我们提高开发效率

通过pip安装第三方包

打开cmd,输入 pip install 包名

由于通过pip直接安装第三方包是通过官方网站进行下载,访问较慢,因此我们可以通过清华大学的一个镜像站进行下载(pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称)

通过PyCharm安装第三方包

点击右下角的Python版本,点击“解释器设置”(汉化环境下),点击+号即可搜索并安装需要的包(可在“选项”中添加镜像源(-i https://pypi.tuna.tsinghua.edu.cn/simple)更改下载地址)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值