Python包+模块:package + module + try 简记 黑马课程

try + import

# -*- coding:utf8 -*-
"""
# create-time: 2022/11/30-8:42
# Python-Script: chapter9-0-module-package-bug.py
# describe:
异常处理
py模块
py包
"""

# lesson1: Error

# f = open("D:/abc.txt", "r", encoding="UTF-8")
## File "E:/python+shell+yaml/python/ithelma/chapter9-0-module-package-bug.py", line 12, in <module>
## FileNotFoundError: [Errno 2] No such file or directory: 'D:/abc.txt'

# 如何捕获异常(异常处理) == 进行debug
"""
对bug进行提醒,整个程序继续运行
提前假设某处会出现异常,做好提前准备,当真的出现异常,可以有后续手段

try:
    可能发生错误代码
except:
    如果出现异常,执行的代码
"""

try:
    f = open("E:/python+shell+yaml/python/python.txt", "r", encoding="UTF-8")
except:
    print("[Errno 2] No such file or directory")
    print("change open module r--> w")
    f = open("E:/python+shell+yaml/python/python.txt", "w", encoding="UTF-8")

# 捕获指定的异常
"""
try:
    可能发生错误代码
except 异常类型 as 别名:
    如果出现异常,执行的代码
    
try:
    print(name)
except NameError as e:
    print("name is not define")
"""

try:
    # print(name)
    1 / 0
except NameError as e:
    print("变量未被定义")
    print(e)
except ZeroDivisionError as zde:
    print("division by zero")
    print(zde)

# 捕获多个异常
try:
    print(name)
    1 / 0
except (NameError, ZeroDivisionError) as e:
    print("mistake")

# 捕获所有异常
try:
    print("name")
    1 / 0
    f = open("D:/123.TXT", "r")
except Exception as e:
    print("mistake all")

# else
"""
else 表示没有异常,需要执行什么代码
"""
try:
    print("name")
except Exception as e:
    print(e)
else:
    print("else == do what without mistake")

# finally
"""
finally 表示是否有异常都需要执行的代码
"""
try:
    f2 = open("E:/python+shell+yaml/python/python.txt", "r", encoding="UTF-8")
except Exception as e:
    print("mistake")
    print("change open module r--> w")
    f2 = open("E:/python+shell+yaml/python/python.txt", "w", encoding="UTF-8")
else:
    print("success no mistake")
finally:
    print("close f2")
    f2.close()

"""
summary
try:
    可能发生的异常后需要执行的语句
except [异常 as 别名:]
    出现异常的准备手段
[else:]
    未出现异常的准备手段
[finally:]
    不管什么情况都要做到的事情
    
    
不管什么错误都能捕获的2种书写方式
except:
except Exception:
"""

# 异常具有传递性
"""
# 定义一个出现异常方法
def fun1():
    print("beginning fun1")
    num = 1 / 0
    print("end fun1")

# 定义一个没有异常方法,调用fun1
def fun2():
    print("beginning fun2")
    fun1()
    print("end fun2")

# 定义一个方法调用fun2
def main():
    fun2()

main()

# beginning fun2
# beginning fun1
# Traceback (most recent call last):
#   File "E:/python+shell+yaml/python/ithelma/chapter9-0-module-package-bug.py", line 140, in <module>
#     main()
#   File "E:/python+shell+yaml/python/ithelma/chapter9-0-module-package-bug.py", line 138, in main
#     fun2()
#   File "E:/python+shell+yaml/python/ithelma/chapter9-0-module-package-bug.py", line 133, in fun2
#     fun1()
#   File "E:/python+shell+yaml/python/ithelma/chapter9-0-module-package-bug.py", line 127, in fun1
#     num = 1 / 0
# ZeroDivisionError: division by zero
"""


# 定义一个出现异常方法
def fun1():
    print("beginning fun1")
    num = 1 / 0
    print("end fun1")


# 定义一个没有异常方法,调用fun1
def fun2():
    print("beginning fun2")
    fun1()
    print("end fun2")


# 定义一个方法调用fun2
def main():
    try:
        fun2()
    except Exception as e:
        print(f"mistake == {e}")


main()

# lesson2 module
"""
python文件,以.py结尾
模块定义函数,类,变量或者可执行代码

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

常用组合
    import 模块名
    form 模块名 import 方法,类,变量
    form 模块名 import *
    import 模块名 as 别名
    form 模块名 import 模块名 as 别名
    
基本语法:
form 模块名
import 模块名
import 模块名1, 模块名2

# 模块功能的使用,需要有原点进行分隔
模块名.功能名()
"""
# 可以使用所有time的模块函数
import time  # 导入 time 模块 + ctrl 加 鼠标左键可以看time的源码

print("sleep beginning3")
time.sleep(3)  # 必须有time module
print("sleep end")

# 只能使用sleep的功能函数
from time import sleep

print("sleep beginning2")
sleep(2)
print("sleep end")

# 将模块内的所有功能都导入进来
"""
* 表示所有功能
"""
from time import *

print("sleep beginning1")
sleep(1)  # 不需要写 time module
print("sleep end")

# 别名
"""
有些模块名字过长,不便于编写代码
引用别名简便书写
"""
import time as tt  # 导入 time 模块 别名是tt

print("sleep beginning tt3")
tt.sleep(3)  # 必须有time module
print("sleep end")

from time import sleep as sl

print("sleep beginning sl2")
sl(2)
print("sleep end")

# 自定义模块
"""
当导入多个模块,且模块名字相同
当调用同名功能时候,调用到后面的同名模块会覆盖前面的模块
"""
import my_module

my_module.test(1, 7)

from my_module import test

test(9, 10)

"""
覆盖测试
"""
print("===========\n")
from my_module import test
from my_module1 import test

test(9, 5)

print("-------------\n")

# __main__ 变量
"""
if __name__ == "__main__":
    test(1,4)
如果执行本chapter9-python脚本,则test(1,4)会被执行

if __main__ == "__main__" 表示:
只要当程序是直接执行,才会进入if内部,如果是被导入,则if无法进入
"""
from my_module1 import test

# __all__ 变量
"""
如果模块文件中有"__all__"变量,
当使用"from xxx import *"导入时,
只能导入这个__all__ = [列表]中的元素,实现模块控制功能

__all__ = ["函数名"] ==> 是列表,可写多个函数 __all__ = ["函数名1","函数名2"] 

实现函数调用控制,只能引入指定函数
__all__ 只作用于 * 上
"""
from my_module_all import *

testB(10, 2)
# testA(10,2)
# Traceback (most recent call last):
#   File "E:/python+shell+yaml/python/ithelma/chapter9-0-module-package-bug.py", line 289, in <module>
#     testA(10,2)
# NameError: name 'testA' is not defined
# 5.0


# lesson3 Py包
"""
包 就是一个文件夹,文件夹下面包含一个__init__.py文件,文件夹包含多个模块文件
包 的本质依然是 模块
包 的作用:包含并统一管理模块
__init__.py文件 表示这个文件夹是一个py包文件,非普通文件夹
"""
import my_package.my_module3
from my_package import my_module4

my_package.my_module3.info_print3()
my_module4.info_print4()

from my_package.my_module3 import info_print3

info_print3()

# 导入包 + ___all__
"""
(必须)在 __init__.py 文件中添加 __all__ = [] 进行模块导入控制
只针对import * 的使用情况
"""
from my_package import *

# from my_package.my_module6 import info_print6
my_module5.info_print5()
print("========================")
# info_print6()

# Traceback (most recent call last):
#   File "E:/python+shell+yaml/python/ithelma/chapter9-0-module-package-bug.py", line 322, in <module>
#     my_module6.info_print6()
# NameError: name 'my_module6' is not defined

# 可以通过手动导入的方式解决问问 from my_package.my_module6 import info_print6


"""
pip 
pip install 第三方包
科学计算 == numpy
数据分析 == pandas
大数据   == pyspark apache-flink
可视化   == matplotlib + pyecharts
人工智能 == tensorflow

命令提示符 进行 安装
cmd
指定网站下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名字

进入python
通过import 包名 
测试安装成功与否
"""

module list

# create-time: 2022/12/1-8:29
# Python-Script: my_module.py


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

def testA(a,b):
    print(a * b)

def testB(a,b):
    print(a / b)

#########################################

# create-time: 2022/12/1-8:33
# Python-Script: my_module1.py



def test(a, b):
    print(a - b)


if __name__ == "__main__":
    test(1, 4)

#########################################

# create-time: 2022/12/1-9:09
# Python-Script: my_module_all.py
 

def testA(a,b):
    print(a * b)

def testB(a,b):
    print(a / b)

__all__=["testB"]

my_package

module_list

# create-time: 2022/12/2-8:37
# Python-Script: my_module3.py
# describe: 演示自定义模块1

def info_print3():
    print("module3 func")

#####################################

# create-time: 2022/12/2-8:38
# Python-Script: my_module4.py
# describe:

def info_print4():
    print("module4 func")

#####################################

# create-time: 2022/12/2-8:52
# Python-Script: my_module5.py

def info_print5():
    print("module5 func")

#####################################

# create-time: 2022/12/2-8:53
# Python-Script: my_module6.py

def info_print6():
    print("module6 func")

__init__.py

# create-time: 2022/12/2-8:36
# Python-Script: __init__.py

# 进行模块功能控制,控制允许使用什么模块
__all__ = ["my_module5"]

文件夹架构

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值