十:《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)
目录
相关文章
|
6天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
19 5
|
16天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
19天前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
62 5
|
23天前
|
Python
SciPy 教程 之 SciPy 模块列表 6
SciPy教程之常量模块介绍:涵盖公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率及力学单位。示例展示了角度单位转换为弧度的几个常用常量。
18 7
|
23天前
|
Python
SciPy 教程 之 SciPy 模块列表 7
`scipy.constants` 模块提供了常用的时间单位转换为秒数的功能。例如,`constants.hour` 返回 3600.0 秒,表示一小时的秒数。其他常用时间单位包括分钟、天、周、年和儒略年。
17 6
|
20天前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
17 1
|
21天前
|
XML 前端开发 数据格式
超级详细的python中bs4模块详解
Beautiful Soup 是一个用于从网页中抓取数据的 Python 库,提供了简单易用的函数来处理导航、搜索和修改分析树。支持多种解析器,如 Python 标准库中的 HTML 解析器和更强大的 lxml 解析器。通过简单的代码即可实现复杂的数据抓取任务。本文介绍了 Beautiful Soup 的安装、基本使用、对象类型、文档树遍历和搜索方法,以及 CSS 选择器的使用。
52 1
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 9
SciPy教程之常量模块介绍,涵盖多种单位类型,如公制、质量、角度、时间、长度、压强等。示例展示了如何使用`scipy.constants`模块查询不同压强单位对应的帕斯卡值,包括atm、bar、torr、mmHg和psi。
13 1
|
22天前
|
Python
SciPy 教程 之 SciPy 模块列表 8
SciPy教程之常量模块单位类型介绍。该模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例展示了部分长度单位的转换值,例如英寸、英尺、海里等。
14 1
|
24天前
|
知识图谱 Python
SciPy 教程 之 SciPy 模块列表 5
本教程介绍SciPy常量模块中的单位类型,涵盖公制、质量、时间、长度等单位。示例代码展示了如何使用`scipy.constants`模块获取不同质量单位的千克值,如公吨、磅、盎司、原子质量单位等。
15 1