十:《Python基础语法汇总》— 模块&异常处理

简介: 本篇文章详细讲解了何为模块及我们常用的内置模块;和常见的异常类型,包括如何主动的去触发异常;异常的语法等

一:模块

1.模块和包:

(1)模块

​ 模块是一个包含所有你定义的函数和变量的文件,其扩展名为 .py ,模块也就是 .py 文件;模块可以被其它的程序引入,以使用该模块中的函数等功能;这也是使用Python标准库的方法

导入模块的方式:

  • import 模块名 -- 导入这个模块的所有功能(函数;属性;类等全部导入)

  • from 模块名 import 功能名(类名;函数名等) -- 从这个模块中精准导入某一功能(类;函数等)

  • from 模块名 import

  • import 模块名 as 别名 -- 别名为自己现取的名字(防止原文件名过长,在这个文件中临时用的名字)

  • from 模块名 import 功能名 as 别名

    注意: 在导入模块的时候不用写后面的后缀 .py ,只写文件名就可以了;如果在这个模块中功能过多,用import精准导入功能名可以节省内存

#导入模块的语法格式
import 模块名
a = 模块名.类名/函数名等 #调用这个函数的某一功能
print(a)
#导入模块的语法格式
from 模块名 import 功能名(类名;函数名等)
a = 功能名
print(a)
#导入模块的语法格式
import 模块名 as bieming
a = bieming.类名/函数名等 #调用这个函数的某一功能
print(a)
b = bieming.类名/函数名等 #调用这个函数的某一功能
if __name__ == '__main__':
文件中的代码块(在初始化时不直接执行的代码)

作用:

  1. if判断,指定在导入文件的过程中控制去执行哪些内容(在要导入的文件内使用)
  2. __name__的属性输出是__main__时,说明这个代码是在当前的文件中执行的;当__name__输出的是当前文件的文件名时,说明__name__是在另一个文件中执行的
  3. if __name__ == '__main__':包裹的代码块不被调用是不会初始化不自动执行的,只有被调用了才会执行
__all__ = []

作用:在__init__.py文件中添加__all__ = [],控制允许导入的模块,只适用于from 包名 import 模 块名的方式

__all__变量的作用:控制import *from 包名 import *能够导入的内容

(2)

​ 基于Python模块,在编写代码的时候,会导入许多外部代码来丰富功能;但是,如果Python的模块太多,就可能造成一定的混乱。这时候,可以通过Python包的功能来管理,包相当于一个文件夹,在该文件夹下包含了一个 __init__.py 文件,通过这个文件表示一个文件夹是Python的包,而非普通的文件夹

导入包的方式:

  • import 包名.模块名

  • from 包名 import 模块名

  • import urllib

    注意: urllib就是包,按住CTRL用鼠标左键点击urllib,就进入了__init__.py初始化的文件中,urllib包中有很多的文件,如:import urllib.request,按住CTRL用鼠标左键点击request,就进入了request文件。包相当于是一个文件夹,模块就是.py文件,一个包里面可以存放多个.py文件,也就是多个模块

#导入包里面模块的语法格式
import urllib #导入包中所有的模块,如果包中模块太多可能会导致运行缓慢
import urllib.request
from urllib import request
#导入包中模块的功能的语法格式1
import urllib.request
urllib.request.Request() #Request()是功能名

#导入包中模块的功能的语法格式2
import urllib.request as R #R是别名
R.Request() #Request()是功能名

#导入包中模块的功能的语法格式3
from urllib import request
Request()
#同时在一个包中导入多个模块
from urllib import request,parse #request和parse是模块名
import request,parse

注意: 导入模块用import;导入包用from:如果只是单纯的模块就用import;如果模块存放在包里面就用from

#导入其它路径下的.py文件
import sys
sys.path.append("绝对路径")
2.常用内置模块:

(1)time模块

time模块常用的方法:

  1. time.sleep(秒):延迟执行时间,休眠,让程序在这里暂停多长时间
  2. time.time():打印当前时间戳,单位秒
  3. time.localtime():打印本地时间以时间元组的形式输出
  4. time.strftime():接收时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定
  • %Y:完整的四位数年份
  • %y:两位数的年份
  • %m:两位数的月份
  • %d:两位数的日期
  • %H:24小时制的小时数
  • %I:12小时制的小时数
  • %M:分钟数
  • %S:秒数(最大为60)
import time
print(time.time()) #输出时间戳,以秒为单位
print(time.localtime()) #输出时间元组
print(time.sleep(3)) #运行到这里时,延迟3秒后继续往下执行
print(time.strftime('%y年 %m月 %d日', time.localtime())) #以字符串的形式输出当前时间

(2)datetime模块

​ 也是与时间相关的模块

import datetime
print(datetime.datetime.now()) #直接输出当前时间(年-月-日 时-分-秒)

(3)random模块:

  • random.random():不用给参数,随机生成(0,1)区间的数,包含0不包含1,生成的都是小数
  • random.randint():随机生成(x,y)区间的数,生成数包含x;y本身
  • random.choice():从指定的序列中随机取出一个元素
  • random.shuffle():打乱一个列表的顺序
  • random.sample():从指定的序列中随机提取不重复的元素
import random
print(random.randint(1, 100)) #随机生成1~100的随机数,包含1和100
print(random.random()) #随机生成0~1,不包含1,生成的是小数,不需要传参数,传的话会报错
print(random.choice([12, 4, 56, 17, 78, 31])) #从这个列表中随机取出一个元素
print(random.choice(range(100))) #随机取出0~99之间的一个数
print(random.sample([4,90,56,89,54,34],2)) #有两个必备参数,缺一不可:一个是序列;一个是要随机取出多少个数,用sample取出的数不会发生重复,是唯一的
p = [45,32,57,8,43,11,50]
random.shuffle(p) #打乱列表p本身的顺序
print(p)

(4)join模块

json是一个序列化的对象或数组,一种使用广泛的轻量数据格式,Python标准库中的json模块提供了json数据的处理功能,由于json与Python中的字典格式非常像,所以Python中的json模块也相当于是用来使json与字典做转换

注意: 对象和数组并不是Python中的对象和数组,而是json中的专有名词;json中的对象对应的是Python中的字典;json中的数组对应的是Python中的列表;序列化指的是更标准的格式,序列化的数据是可以在多个平台上使用的,如:Python中的数据是不能与JAVA;C++中的数据混用的,但json中的数据可以;因为json中的数据是经过序列化的,是更标准的格式,可以跨平台使用的一种格式

json模块常用的方法:

  • json.loads()json转换为字典(适用于语句)
  • json.dumps():字典转换为json(适用于语句)
  • json.load()json转换为字典(适用于文件)
  • json.dump():字典转换为json(适用于文件)
#针对语句的示例代码
import json
A = {
   "age":18} #字典格式
B = '{"age":18}' #json格式;属于字符串类型
print(type(B))
#把json格式的B转换成字典,通过json进行语句转换
#不能使用str进行强制转换,因为字典可以转换成其它的序列,但是其它的序列不能直接转换成字典;字典与字典可以互转
a = json.loads(B)
print(a,type(a))
#把字典A转换为json格式(str类型),通过json进行语句转换
b = json.dumps(A)
print(b,type(b))

C = {
   "name":"张四"}
print(json.dumps(C)) #此时因为字典中有中文,json格式会把中文变成ASCII编码
print(json.dumps(C,ensure_ascii=False)) #此时中文便被固定住了,不会进行ASCII编码转换
#针对文件的示例代码
name = {
   "name":"张四"}
import json
with open('json.txt','w',encoding='utf-8') as i:
    json.dump(name,i,ensure_ascii=False)

with open('json.txt','r',encoding='utf-8') as i:
    a = json.load(i)
    print(a)

注意: json是一种通用格式,是跨编程语言的工具


二:异常处理

  • ​ 当检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的异常
  • ​ 异常是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行,当Python脚本发生异常时我们可以捕获并处理它,不然程序会终止执行;当对异常进行捕获之后,它就不会影响整体程序的执行。只要是报错,它就是一个异常
1.异常语法:
#语法1
try: #这一句在异常语法里是必须要有的
    程序正常执行的代码
except: #捕获异常
    抛出错误时执行此代码块
#语法2
try:
    程序正常执行的代码
except Exception as a:
    抛出错误时执行此代码块
else: #检验代码的正确性
    程序没有抛出错误时执行此代码块
finally:
    不管程序有无异常,都会执行的代码块
#示例代码
a = "w"
try:
    b = int(a) #try里面的代码无论如何都会执行
except:
    print("这句代码有错误") #except里面的代码是当try里面的代码出现异常时执行
else:
    print("代码正确") #else里面的代码是当try里面的代码没有异常出现时执行
finally:
    print("我就是路过") #try里面的代码无论是否出现异常都会执行
print("dudu")
#输入一个数字并加上10
try:
    num = int(input("请输入数字:"))
except:
    num = 1
    print("输入有误,已经强制为num赋值为1")
print(num+10)

注意: elsefinally是可以省略不写的

2.常见的异常类型
异常名称 描述
AttributeError 对象没有这个属性
OSError 操作系统错误
ImportError 导入模块/对象失败
IndexError 序列中没有此索引(index)
KeyError 没有这个键
NameError 未声明/初始化对象(没有属性)
SyntaxError Python语法错误
TypeError 对类型无效的操作
ValueError 传入无效的参数
Warning 警告的基类

注意: Warning是警告,警告一般都不会影响程序的执行

3.主动触发异常

​ 在实际开发中,在程序不满足某条件时,通常会主动抛出异常,语法如下:

raise Exception()

注意: raise关键字表示自动触发异常,就算代码没有错误,也让它报错

#判断烧饼熟了没,当烹饪时间小于5分钟,主动触发没熟异常
def cooking(minutes):
    if minutes < 5:
        raise Exception(f'{minutes}分钟没熟,不能吃') #手动的去触发异常
    else:
        print("熟了,放心吃")
cooking(6)
目录
相关文章
|
3月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
155 62
|
11天前
|
数据库连接 开发者 Python
Python中的异常处理
本文深入探讨了Python中的异常处理机制,包括异常的捕获、处理、抛出及最佳实践。通过try-except语句块,程序可以在运行时处理错误,增强健壮性和可维护性。文章还介绍了自定义异常类的创建与使用,并提供了代码示例和详细的语法说明。最后,总结了异常处理的最佳实践,如精确捕获异常、提供有用错误信息等,帮助开发者编写更可靠的代码。
51 14
|
2月前
|
Python
Python Internet 模块
Python Internet 模块。
131 74
|
3月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
141 63
|
3月前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
3月前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
133 61
|
3月前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
3月前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
1月前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
32 3
|
3月前
|
JSON Linux 数据格式
Python模块:从入门到精通,只需一篇文章!
Python中的模块是将相关代码组织在一起的单元,便于重用和维护。模块可以是Python文件或C/C++扩展,Python标准库中包含大量模块,如os、sys、time等,用于执行各种任务。定义模块只需创建.py文件并编写代码,导入模块使用import语句。此外,Python还支持自定义模块和包,以及虚拟环境来管理项目依赖。
Python模块:从入门到精通,只需一篇文章!

热门文章

最新文章