当前位置: 首页 > news >正文

【嵌入式学习4】模块、包、内置模块、异常

目录

1、模块

①创建模块文件

②导入模块

2、模块导入冲突

①局部引入冲突及解决方案

②全部引入冲入及解决方案

3、模块的内置变量__name__

__name__的作用

4、包

①引入包中模块功能:import 包名.模块名

②引入包中模块功能:from 包名 import 模块名

③引入包中模块功能:from 包名.模块名 import 变量,函数,类

④引入包中模块功能:from 包名.模块名 import *

5、开启本地http文件分享服务

6、系统内置模块

①sys模块

②time模块

③datetime模块

④计算排序

⑤math模块

⑥random模块

7、exception异常

①捕获异常

②finally

③try except finally

④try except else finally

⑤多重捕获

⑥常见异常类型


1、模块

        类似于写一个单独出来的.py文件,再将其作为模块导入进主文件。

①创建模块文件
"""
模块名utils.py
"""

# 定义变量 
name = '张三'

# 定义函数
def sum(a,b):
    return a+b

# 定义类
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        return 'name:{},age:{}'.format(self.name,self.age)
②导入模块
"""
整体导入模块
"""
import utils

# 使用模块中功能
print(utils.name)
# 调用模块中的sum方法
result = utils.sum(10,20)
# 创建模块utils中的Person类对象
p = utils.Person('张三',30)

"""
导入模块部分功能
"""
from utils import name, sum

# 使用name
print(name)
# 调用sum函数
result = sum(10,20)

"""
导入模块全部功能
"""
from utils import *

# 使用name
print(name)
# 调用sum函数
result = sum(10,20)
# 创建Person对象
p = Person('李云龙',60)

2、模块导入冲突

        如果两个模块中有同名的变量、函数或者类,同时引入就可能出现冲突

①局部引入冲突及解决方案
# 同时引入name的话,输出的name是hi中的name,是有顺序的
from hello import name
from hi import name

print(name)

# 局部引入冲突解决方法:用as起别名
from hello import name as hello_name
from hi import name as hi_name

print(hello_name)
print(hi_name)
②全部引入冲入及解决方案
from hello import *
from hi import *

print(name) # 输出的是hi中的name属性


# 解决方案:直接引入模块
import hello
import hi

print(hello.name)
print(hi.name)

3、模块的内置变量__name__

       由下面的例子可以得知:

  • 如果当前模块作为启动项,__name__ 值为 __main__
  • 如果当前模块当作依赖引入,__name__ 值不为 __main__,为依赖的模块名称
# ①
# 创建hello.py
print(__name__)
# 结果为 __main__

# ②
# 导入其他模块hello.py
import hello
print(__name__)
# 结果为 hello
__name__的作用

        python没有入口函数的概念,可将主程序代码放入if __name__ = '__main__':中,当前模块即可以独立测试运行,也可以被其他文件导入使用。

def sum(m,n):
    return m+n

if __name__ == '__main__':
    a = 10
    b =20
    result = sum(a,b)
    print(result)

4、包

        用来放模块的文件夹,限定模块命名空间,管理模块让业务更加清晰

network包:可以用来管理网络访问
    cart模块中,可以提供购物车的增删改查功能
    product中,可以提供商品的查看功能
    user模块中,可以提供登录,注册等功能

storage包:可以用来管理本地存储
    cart模块中,可以提供购物车存储功能
    product中,可以提供商品存储功能
    user模块中,可以提供用户信息存储功能
①引入包中模块功能:import 包名.模块名
import pkg.hello

#访问模块中的属性
print(pkg.hello.name)

#访问模块中的函数
pkg.hello.say()

#访问模块中的类
nice = pkg.hello.Nice()
②引入包中模块功能:from 包名 import 模块名
from pkg import hello

#访问模块中的属性
print(hello.name)

#访问模块中的函数
hello.say()

#访问模块中的类
nice = hello.Nice()
③引入包中模块功能:from 包名.模块名 import 变量,函数,类
from pkg.hello import name
from pkg.hello import say
from pkg.hello import Nice

#访问模块中的属性
print(name)

#访问模块中的函数
say()

#访问模块中的类
nice = Nice()
④引入包中模块功能:from 包名.模块名 import *
from pkg.hello import *

#访问模块中的属性
print(name)

#访问模块中的函数
say()

#访问模块中的类
nice = Nice()

5、开启本地http文件分享服务

python -m http.server 8080
  • 这个命令会启动一个简单的 HTTP 服务器,监听指定的端口(在这里是 8080)

  • 它会将当前目录及其子目录中的文件作为静态资源提供给客户端访问

  • 如果当前目录下有一个名为 index.html 的文件,客户端可以通过浏览器访问 http://localhost:8080/index.html 来查看该文件

6、系统内置模块

①sys模块
  • sys.argv:获取启动时的参数
import sys

print("脚本名称:", sys.argv[0])
print("参数列表:", sys.argv[1:])

"""
运行脚本时:
python script.py arg1 arg2

输出:
脚本名称: script.py
参数列表: ['arg1', 'arg2']
"""
  • sys.path:获取加载的环境
import sys

print("模块搜索路径:", sys.path)

"""
可以修改sys.path来动态添加模块搜索路径,可以将新的路径添加到模块搜索路径的末尾
sys.path.append("/path/to/my/module")
"""
import sys

# 添加新的模块搜索路径
sys.path.append('/path/to/your/module')

# 现在可以导入该路径下的模块
import your_module
  • sys.exit():程序退出
import sys

if __name__ == "__main__":
    print("程序开始运行")
    sys.exit(0)  # 正常退出
    print("这行代码不会被执行")
②time模块

该模块包含和时间相关的信息

import time
result = time.time() # time.time()获取当前时间戳,单位是秒
print(result)
import time

# print('程序开始')

time.sleep(3) # 睡眠3秒钟,阻断程序
# print('程序结束')
③datetime模块
"""
datetime获取日期
datetime.datetime.now().year
datetime.datetime.now().month
datetime.datetime.now().day
"""

import datetime
# 获取当前年
year = datetime.datetime.now().year
# 获取月
month = datetime.datetime.now().month
# 获取日期
day = datetime.datetime.now().day
print(year)
print(month)
print(day)

# 格式化日期时间
"""
strftime() 是 datetime.datetime 类的一个方法,用于将日期和时间对象格式化为字符串。
datetime_object.strftime(format_string)
"""
now = datetime.datetime.now()
str_time = datetime.datetime.strftime(now, "%Y-%m-%d %H:%M:%S")
④计算排序
aaa = [2, 4, 1, 2, 3, 6]
# 列表最大值
print(max(aaa))
# 列表最小值
print(min(aaa))
# 列表和
print(sum(aaa))
# 列表长度
print(len(aaa))
# 列表排序
print(sorted(aaa))
# 列表倒序
print(sorted(aaa, reverse=True))
⑤math模块
import math
# 幂
print(math.pow(10, 2))
# 向下取整
print(math.floor(1.8234234234234))
# 向上取整
print(math.ceil(1.1234234234234))
# 四舍五入
print(round(1.6234234234234))

# sin  传入弧度值  pi 3.14 180度
print(math.sin(1.57))
⑥random模块
import random

# 随机整数
print(random.randint(10, 20))
# 随机小数 [0, 1)
print(random.random())
# 随机浮点类型数据,random.uniform(start,end)
print(random.uniform(1.3, 8.5))

# 从列表中随机获取元素
lst = [10,20,30]
print(random.choice(lst))

# 随机返回列表 返回单个元素的列表
print(random.choices(lst))

7、exception异常

①捕获异常
try:
    代码
except:
    出现异常的代码

try:
    result = a/b
    print('没有异常',result)
except Exception as error:# 如果代码有异常会执行 ,没有异常并不会执行
    print('出现了异常',error)
②finally
try:
    逻辑代码
finally:
    无论是否出现异常,都会执行

try:
    a = 1 / 0
    print("异常之后的代码", a)
finally:
    print("finally里的代码")
③try except finally
try:
    逻辑代码
except Exception as error:
    print(error)
finally:
    无论是否出现异常,都会执行

-------
# 无论文件是否操作失败,最终都需要关闭文件,所以把文件关闭的方法放到finally中
f = open('a.txt','w')

try:
	f.write('hello')
    # 出现异常
    a = 10
    b = 0
    re = a/b
except:
    print('出现异常')
finally: # 即使程序出现异常  finally里面的代码也可以继续执行
    # 必须要关闭 内存泄漏
    f.close()
    print('文件已经关闭了')
④try except else finally
try:
    逻辑代码
except Exception as error:
    print(error)
else:
    没有出现异常的逻辑
finally:
    无论是否出现异常,都会执行

-----
a = 10
b = 0
try:
    result = a / b
    print(result)
except:
    print('出异常')
else:
    print('没有出异常')
finally:
    print('最终执行的代码')
⑤多重捕获
# 可以通过多个except捕获不同的异常分别处理
try:
    a = 1 / 0

    b = [1, 2]
    c = b[4]
except IndexError as error:
    print("indexerror 错误逻辑")
except ZeroDivisionError as error:
    print(error)
⑥常见异常类型
IndexError

数组下表越界异常

KeyError

字典中键不存在

ValueError

值类型错误

AttributeError

对象中属性、函数不存在

http://www.dtcms.com/a/111479.html

相关文章:

  • CherryStudio MCP实战(一)filesystem篇
  • Cmake:Win10 如何编译 midifile C++应用程序
  • leetcode 数组总结篇
  • 湖北师范大学计信学院研究生课程《工程伦理》12.6章节练习
  • 离线部署kubesphere(已有k8s和私有harbor的基础上)
  • 鸿蒙 harmonyOS 网络请求
  • AWS云安全基线:构建企业级安全防护体系的完整指南
  • Ubuntu 安装 JMeter:为你的服务器配置做好准备
  • C++ - 宏基础(简单常量替换宏、函数样式的宏、多行宏、预定义宏、字符串化宏、连接宏、可变参数日志宏)
  • 深入理解C++引用:从基础到现代编程实践
  • 【设计模式】代理模式
  • 如何计算财富自由所需要的价格?
  • mapbox进阶,使用本地dem数据,加载hillshade山体阴影图层
  • 什么是缓存穿透、缓存雪崩、缓存击穿?
  • 使用VS2022远程调试Linux项目问题
  • Linux / Windows 下 Mamba / Vim / Vmamba 安装教程及安装包索引
  • 程序化广告行业(54/89):人群标签、用户标签与Look Alike原理详解
  • 鸿蒙NEXT开发随机工具类(ArkTs)
  • 【大模型基础_毛玉仁】6.5 实践与应用--RAG、Agent、LangChain
  • FPGA--HDLBits网站练习
  • 思维链、思维树、思维图与思维森林在医疗AI编程中的应用蓝图
  • ARXML文件解析-1
  • 14.流程自动化工具:n8n和家庭自动化工具:node-red
  • 解决LeetCode“使括号有效的最少添加”问题
  • Android Hilt 教程
  • 马斯克 AI 超算
  • 蓝桥云客---九宫幻方
  • ngx_ssl_init
  • 【2-7】脉码调制
  • Apache httpclient okhttp(2)