九:《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未声明/初始化对象(没有属性)
SyntaxErrorPython语法错误
TypeError对类型无效的操作
ValueError传入无效的参数
Warning警告的基类

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

3.主动触发异常

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

raise Exception()

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

#判断烧饼熟了没,当烹饪时间小于5分钟,主动触发没熟异常
def cooking(minutes):
    if minutes < 5:
        raise Exception(f'{minutes}分钟没熟,不能吃') #手动的去触发异常
    else:
        print("熟了,放心吃")
cooking(6)
  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温轻舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值