1.异常的捕获方法

  • 基本语法

    try:
        可能发生错误的代码
    except:
        如果出现异常执行的代码
    
    • 示例
    # 基本捕获异常语法
    try:
        f = open("./data.txt","r",encoding="UTF-8")
    except:
        print("文件不存在")
        f = open("./data.txt","w",encoding="UTF-8")
    
  • 捕获指定异常

    • 语法
    # 捕获指定的异常
    try:
        print(name)
    except NameError as e:
        print("出现未定义变量异常")
        print(e)
    

    如果尝试执行的代码异常类型和要捕获的异常类型不一致,则无法捕获异常。一般情况下try下方只放一行尝试执行的代码

  • 捕获多个异常

    • 语法:当捕获多个异常时,可以吧要捕获的异常类型名字,放到except后面,帮使用元组的方式进行书写
    # 捕获多个异常
    try:
        1/0
        print(name)
    except (NameError,ZeroDivisionError) as e:
        print("出现未定义变量异常 或是 被除数为0异常")
        print(e)
    

image-20230810213129311.png

  • 捕获所有异常

    • 语法
    # 捕获所有异常
    try:
        1/0
        print(name)
        f = open("data.txt","r",encoding="UTF-8")
    except Exception as e:
        print(f"出现异常,异常信息为:{e}")
    
  • 异常else、finally

    try:
        1/0
        print(name)
        f = open("data.txt","r",encoding="UTF-8")
    except Exception as e:
        print(f"出现异常,异常信息为:{e}")
    else:
        print("未出现异常,执行未异常的逻辑")
    finally:
        print("无论如何,我都会执行")
    

2.异常的传递

与Java一致,没处理就向上抛,谁用抛给谁,最终抛给程序,没捕获则报错

3.Python模块

3.1、模块的导入

  • 模块
    • 是一个 Python 文件以.py结尾,模块能定义函数、类和变量,模块里也能包含可以执行的代码
  • 作用—— Java中的jar包

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

    [from 模块名] import [模块|类|变量|函数|*] [as 别名]
    # [] 内的 可有可无
    
    • import 模块名
    # 使用import导入time模块使用sleep功能
    import time
    print("Hello")
    time.sleep(3)
    print("World")
    
    • from 模块名 import 功能名
    # 使用from导入time的sleep功能
    from time import sleep  # 示意为只从time模块中拿sleep方法来使用,其它方法不使用
    print("Hello")
    sleep(3)        # 不用通过time,直接使用即可
    print("World")
    
    • from 模块名 import *
    # 使用*导入time模块的全部功能
    from time import *  # 将time模块中的所有方法都导入进来,使用时候就可以不用通过time.
    print("Hello")
    sleep(3)
    print("World")
    
    • as 定义别名
    # 使用as给特定功能加上别名
    import time as t
    t.time(3)
    from time import sleep as sl
    sl(3)
    

3.2、自定义模块

  • 示例:创建python文件夹,定义函数

image-20230810213218038.png

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

  • 测试模块
# 导入自定义模块使用
#import model01
from model01 import add
add(3,4)

【问题:如果还导入的模块,里面存在测试执行函数的代码】

def test(a, b):
    print(a + b)
test(1, 1)

【解决方案:通过模块中的image-20230810213231917.png

def test(a, b):
    print(a + b)
# 只在当前文件中调用该函数,其他导入的文件内不符合该条件,则不执行test函数调用
if __name__ == '__main__':
    test (1, 1)

当导入多个模块的时候,且存在同名的功能,当同时调用的时候,后面导入模块的功能会覆盖前面的(只执行了后面的)

image-20230810213239657.png

  • 如果一个模块文件中存在该变量,当使用 from xxx import * 的时候,只能导入该列表中的元素
__all__ = ["testA"]
def testA():
    print("A")

def testB():
    print("B")

调用

# __all__变量
from model03 import *
testA()
testB() #报错

4.Python包

4.1、自定义包

  • Python包
    • 就是一个文件夹,在该文件夹下面包含了一个 init .py文件,该文件可用于包括多个模块文件
  • 作用

    • 模块文件越来越多的时候,可以帮助管理这些模块
  • 示例

    1. 新建包 myPackage
    2. 新建包内模块: my_module1 和 my_module2

image-20230810213249832.png

  • 导入包:方式一

    import 包名.模块名
    
    # 导入自定义的包中的模块,并使用
    import myPackage.model01
    import myPackage.model02
    myPackage.model01.testA()
    myPackage.model02.testA()
    import myPackage.model01 as a
    import myPackage.model02 as b
    a.testA()
    b.testA()
    from myPackage import model01
    model01.testA()
    from myPackage.model01 import testA
    testA()
    
  • 导入包:方式二:

    from 包名 import *
    

    必须在 init.py文件中添加 all 变量,控制允许导入的模块列表

image-20230810213258282.png

  # 通过__all__变量,控制import *
  from myPackage import *
  model01.testA()
  model02.testA()  # 报错

4.2、安装第三方包

  • 在Python程序中,有许多非常多的第三方包,可以帮主提高开发效率:
    • 科学计算中常用的:numpy
    • 数据分析中常用的:pandas
    • 大数据计算中常用的:pyspark、apache-flink包
    • 图形可视化常用的:matplotlib、pyecharts
    • 人工智能常用的:tensorflow

类似Java中的jar

  • 安装第三方包—— pip

    • 打开cmd —— pip install 包名称

image-20230810213305895.png

  • pip的网络优化

    • 由于pip连接的国外的网站进行包下载的,所以会比较慢
    • 可以更换cmd运行命令
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
    
  • 安装第三方包——Pycharm

image-20230810213315345.png

image-20230810213324351.png

4.3、案例

image-20230810213331005.png

  • my_utils

image-20230810213337301.png

  • str_utils.py
# 接收传入字符串,将字符串反转返回
def str_reverse(s):
    return s[::-1]

# 按照下标x和y,对字符串进行切片
def substr(s,x,y):
    return s[x:y:1]

if __name__ == '__main__':
    str.str_reverse("abcdefg")
    str.substr("马浩楠22190", 3, 5)
  • file_util.py
# 接收传入文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
def print_file_info(file_name):
    try:
        f = open(file_name, "r", encoding="UTF-8")
        print(f.read())
    except Exception as e:
        print(f"文件不存在,异常信息:{e}")
    finally:
        if f:
            f.close()
# 接收文件路径以及传入数据,将数据追加写入到文件中
def append_to_file(file_name,data):
    f = open(file_name,"a",encoding="UTF-8")
    f.writelines(data)

if __name__ == '__main__':
    print_file_info("./data.txt")
    append_to_file("./append.txt", "我叫马浩楠\n今年22岁\n身高190")
  • 测试
import my_utils.file_util as file
import my_utils.str_util as str
file.print_file_info("./data.txt")
file.append_to_file("./append.txt","我叫马浩楠\n今年22岁\n身高190")
print(str.str_reverse("abcdefg"))
print(str.substr("马浩楠22190",3,5))

results matching ""

    No results matching ""