# -*- 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
## 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
# 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
# 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
# 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 包名
测试安装成功与否
"""
# 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"]
# 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")
# create-time: 2022/12/2-8:36
# Python-Script: __init__.py
# 进行模块功能控制,控制允许使用什么模块
__all__ = ["my_module5"]