零基础Python学习,第九章:Python异常、模块、包

# Python异常、模块、包

# Python异常:程序运行过程中出现了错误

# 1.异常捕获:对可能出现的异常进行提前准备和处理
# 遇到BUG后的两种情况:1.整个程序因为一个BUG停止运行;2.对BUG进行提醒,整个程序继续运行
# 基本语法:
"""
try:
    print("可能发生错误的代码")
except:
    print("如果出现异常执行的代码")
"""
from my_package.my_package_module_1 import info_print_1
from my_package.my_package_module_2 import info_print_2

# 需求:尝试以‘r’模式打开文件,如果文件不存在,则以‘w’方式打开
"""
try:
    f = open("D:\\PYTHON_EXAMPLE\\test.txt",'r')
except:
    print("出现异常了,因为文件不存在,将以w模式打开或创建文件")
    f = open("D:\\PYTHON_EXAMPLE\\test.txt",'w')
"""
# 捕获指定异常
# 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常
# 一般try下方只放一行尝试执行的代码
# 基本语法:
"""
try:
    print(name)
except NameError as e: #e换成其他字母也可以
    print("name变量名称未定义")
    print(e) #说明异常情况
try:
    1/0
except ZeroDivisionError as e:
    print("0不可作为除数")
    print(e) #说明异常情况
"""

# 捕获多个异常
"""
try:
    print(1/0)
    print(name)
except(NameError,ZeroDivisionError) as e: #在excep后括号内(元组)捕获的异常类型
    print("出现。。。问题")
"""

#捕获所有异常
"""
try:
    #print(1/0)
    #print(name)
    f = open("D:\\PYTHON_EXAMPLE\\test.txt", 'r')
except Exception as e:
    print(e)
"""

# 异常else
"""
try:
    print(1+1)
except Exception as e:
    print(e)
else:
    print(1+2) #如果没有异常,就执行这个代码
"""

# 异常的finally
# 无论是否出现异常都要执行的代码,例如关闭文件

try:
    f = open('aaa.txt','r') #在项目文件夹下读取文件
except Exception as e:
    f = open('aaa.txt','w')
else:
    print('没有异常,哈哈哈')
finally:
    f.close()
    print("不管有没有异常,finally下边的代码都执行")

# 2.异常的传递
# 异常具有传递性
# 例子:
"""
def func_1():
    print("func_1开始")
    num = 1/0 #异常点
    print(num)
    print("func_1结束")

def func_2():
    print("func_2开始")
    func_1()
    print("func_2结束")

def main():
    try:
        func_2()
    except Exception as e:
        print(e)

main()
#在这个例子中可以看出:func_1内的异常可以在其他函数中被调用时被检测出来,而且不管传递多少次都会
# 当然,当所有函数都没有捕获异常的时候,程序就会报错
"""

# 3.Python模块
# 定义:是一个python文件,以.py结尾
# 模块能定义函数,类和变量,内部也能包含可执行代码,我们可以将模块当作工具包使用

# 模块导入方式
# [from 模块名] import [模块|类|变量|函数|*] [as 别名] # import必须写,其他可写可不写
# 常用组合形式:
# import 模块名
# from 模块名 import 类 or 变量 or 函数 and so on
# from 模块名 import *  #*号表示导入模块所有内容
# from 模块名 as 别名
# from 模块名 import 功能名 as 别名

# 基本语法:import 模块名1,模块名2; 模块名.功能名()
# 例子:导入time模块

# time内所有功能都能使用,功能前要带time前缀
"""
import time #导入time.py文件
print("Hello")
time.sleep(5) #通过.使用模块内的功能
print("World")
"""
# 从模块内导入具体功能
"""
from time import sleep
print("Hello")
sleep(5) #通过.使用模块内的功能,不用带上模块名前缀
print("World")
"""
# 从模块内导入所有功能
"""
from time import *
print("Hello")
sleep(2) #通过.使用模块内的功能,不用带上模块名前缀
print("World")
"""
# 从模块内导入功能并对模块改名
"""
import  time as t
print("Hello")
t.sleep(2) #前缀改名了
print("World")
"""
# 从模块内导入功能并对功能改名
"""
from time import sleep as s
print("Hello")
s(2) #功能改名了
print("World")
"""

# 4.自定义模块并导入
# 自己制作模块,新建一个py文件,并在内部定义一些函数
# 模块名要符合命名规范!!!
"""
import my_module_1
my_module_1.test()
"""
# 当导入多个模块时,且模块内有同名功能,当调用这个同名功能时,调用的是后导入的模块的功能
"""
from my_module_1 import test #该语句变暗,即未使用
from my_module_2 import test
test()
"""
# my_module_1模块内含有执行代码,此时仅导入my_module_1模块,不使用模块的功能
from my_module_1 import test #仅引用就执行其内部代码
# 解决办法:在模块内加
# __main__变量
"""
if __name__ == '__main__':
    test()
"""
# __all__变量,这是一个列表变量
# 如果一个模块文件中有‘__all__’变量,当使用‘from xxx import *’导入时,只能导入这个列表中的元素
"""
from my_module_1 import * #*受__all__变量控制,可调用的功能受all变量限制
add(1,2)
minus(2,1) #该函数在模块内有定义,但all变量不包含此函数,故不能使用该函数
# 注意:Pycharm在你调用其他模块的函数时会自动帮你导入对应模块内的该函数:from my_module_1 import minus ,这导致all变量不起作用
"""

# 5.Python自定义包
# 如果python模块太多就会造成一定混乱,这时候就得用上包
# 包是一个文件夹,里面包含了许多模块,但其本质上依然是模块
# 包内必定存在一个文件:__init__.py
# Pycharm内,直接在项目文件夹处鼠标右键新建软件包即可

# 导入包
# 方式1:import 包名.模块名;使用:包名.模块名.目标功能
"""
import my_package.my_package_module_1
import my_package.my_package_module_2
my_package.my_package_module_1.info_print_1()
my_package.my_package_module_2.info_print_2()
"""
# 方式2:from导入包
"""
from my_package import my_package_module_1
from my_package import my_package_module_2
my_package_module_1.info_print_1()
my_package_module_2.info_print_2()
"""
"""
from my_package.my_package_module_1 import info_print_1
from my_package.my_package_module_2 import info_print_2
info_print_1()
info_print_2()
"""
# __all__变量控制*的行为
"""
from my_package import *
my_package_module_1.info_print_1()
# NameError: name 'my_package_module_2' is not defined. Did you mean: 'my_package_module_1'?
my_package_module_2.info_print_2() #all变量中不包含my_package_module_2
"""

# 6.导入第三方包
"""
在Python程序的生态中,有许多非常多的第三方包(非Python官方),可以极大的帮助我们提高开发效率,如:
科学计算中常用的:numpy包
数据分析中常用的:pandas包
大数据计算中常用的:pyspark、apache-flink包
图形可视化常用的:matplotlib、pyecharts
人工智能常用的:tensorflow
等
由于都是第三方包,所以Python没有内置
"""
# 使用python内置的pip程序来通过网络安装第三方包
# 打开命令提示符
# 输入命令:pip install 包名称
# 也可以通过国内网站进行包的安装
# 输入命令:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称

# 使用Pycharm安装第三方包
# 右下角的Python解释器内点击解释器设置,就能看到已经安装的包
# 按+号后搜索想要用的包然后下载即可
# 如果嫌下载慢,则在options内写:-i https://pypi.tuna.tsinghua.edu.cn/simple
# 在下方能看到下载进程

# 7.综合案例
# 需求:
"""
创建一个自定义包,名称为:my_utils(我的工具)
在包内提供2个模块
1. str_util.py(字符串相关工具,内含:)
函数:str_reverse(s),接受传入字符串,
将字符串反转返回函数:substr(s,x,y),按照下标x和y,对字符串进行切片

2. file_util.py(文件处理相关工具,内含:)
函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,
如文件不存在则捕获异常,输出提示信息,通过
finally关闭文件对象函数:appendtofile(filename,data),
接收文件路径以及传入数据,将数据追加写入到文件中
"""
# 详见my_utils包


my_module_1

__all__ = ['add']

def test():
    print("您使用了my_module_1模块内的test函数")

def add(x,y):
    print(x+y)

def minus(x,y):
    print(x-y)



if __name__ == '__main__':
    print("该语句在my_module_1内运行,并未放在函数内")

my_module_2

def test():
    print("您使用了my_module_2模块内的test函数")

my_package包

综合案例:
创建一个自定义包,名称为:my_utils(我的工具)
在包内提供2个模块

  1. str_util.py(字符串相关工具,内含:)
    函数:str_reverse(s),接受传入字符串,
    将字符串反转返回函数:substr(s,x,y),按照下标x和y,对字符串进行切片

  2. file_util.py(文件处理相关工具,内含:)
    函数:print_file_info(file_name),接收传入文件的路径,打印文件的全部内容,
    如文件不存在则捕获异常,输出提示信息,通过
    finally关闭文件对象函数:appendtofile(filename,data),
    接收文件路径以及传入数据,将数据追加写入到文件中
    my_utils包

str_util模块

def str_reverse(s):
    str_1 = str(s)
    return str_1[::-1]

def substr(s, x, y):
    str_1 = str(s)
    return str_1[x:y:]

if __name__ == "__main__": #功能测试
    print(str_reverse("Hello World"))
    print(substr("Hello World",6,11))

file_util模块


def print_file_info(file_name):
    fl = None
    try:
        fl = open(file_name,"r",encoding = "UTF-8")
        content = fl.read()
        print(content)
    except Exception as e:
        print(f"程序异常,错误为:{e}")
    finally:
        if fl:
            fl.close()
    return None

def append_to_file(file_name, data):
    f = open(file_name, 'a', encoding = "UTF-8")
    f.write("\n%s" %data)
    f.close()

if __name__ == "__main__": #功能测试
    print_file_info("T:\PY_Learning\课后练习.txt")
    append_to_file("T:\PY_Learning\课后练习.txt", "HAHAHA")```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值