try…except尝试解决被动掉坑报错
python标准异常
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
二进制
二进制转十进制:
编码表 | 适用性 | 特点 |
---|---|---|
ASCLL码 | 英文大小写,字符,不支持中文 | 占用空间小 |
GB2312码、GBK码 | 支持了中文 | GBK码是GB2312的升级 |
Unicode码 | 支持国际语言 | 占用空间大,适用性强。在ASCLL码前面补8个就成了Unicode码 |
UTF-8码 | 支持国际语言 | 是Unicode的升级,两者可以非常容易地互相转化,占用空间小。ASCLL码被UTF-8码包含 |
二进制 10010 = 1x2^4 + 0x2^3 + 0x2^2 + 1x2^1 + 0x2^0 =16 + 0 + 0 + 2 +0 = 18
【encode】(编码)和【decode】(解码)
print('吴枫'.encode('utf-8'))
print('吴枫'.encode('gbk'))
print(b'\xe5\x90\xb4\xe6\x9e\xab'.decode('utf-8'))
print(b'\xce\xe2\xb7\xe3'.decode('gbk'))
文件
读文件:开——读——关
file1 = open('/Users/Ted/Desktop/test/abc.txt','r',encoding='utf-8')
filecontent = file1.read()
file1.close()
#以读的方式打开文件“abc.txt”
#读取“abc.txt”文件的内容,然后保存在变量filecontent里
#关闭文件
写文件:开——写——关
file1 = open('/Users/Ted/Desktop/test/abc.txt','a',encoding='utf-8')
file1.write('张无忌\n')
file1.close()
#以追加的方式打开文件“abc.txt”
#再把字符串“张无忌”写入文件file1
#关闭文件
open()函数
方式 | b(bytes,字节) | + | b+ | |
---|---|---|---|---|
r(read,读) | r只读,指针在开头,文件不存在则报错 | rb二进制只读,其余同左 | r+读写,其余同左 | rb+二进制读写,其余同左 |
w(write,写) | w只写,文件不存在则新建,存在则覆盖 | wb二进制只写,其余同左 | w+读写,其余同左 | wb+二进制读写,其余同左 |
a(append,追加) | a追加,文件存在指针放在末尾,文件不存在则新建 | ab二进制追加,其余同左 | a+追加且可读,其余同左 | ab+二进制追加,且可读,其余同左 |
普通写法
file1 = open(‘abc.txt’,’a’)
file1.write(‘张无忌’)
file1.close()
使用with关键字的写法
with open('abc.txt','a') as file1:
#with open('文件地址','读写模式') as 变量名:
#格式:冒号不能丢
file1.write('张无忌')
#格式:对文件的操作要缩进
#格式:无需用close()关闭
csv模块
读取csv文件
假如有test.csv文件
with open("test.csv",newline = '') as f:
reader = csv.reader(f)
#使用csv的reader()方法,创建一个reader对象
for row in reader:
#遍历reader对象的每一行
print(row)
print("读取完毕!")
写入csv文件
import csv
with open('test.csv','a', newline='',encoding='utf-8') as f: #'a'代表追加写入文件
writer = csv.writer(f)
writer.writerow(['4', '猫砂', '25', '1022', '886'])
writer.writerow(['5', '猫罐头', '18', '2234', '3121'])
os模块
os方法:
os.getcwd() # 返回当前工作目录
os.listdir(path) # 返回path指定的文件夹包含的文件或文件夹的名字的列表
os.mkdir(path) # 创建文件夹
os.path.abspath(path) # 返回绝对路径
os.path.basename(path) # 返回文件名
os.path.isfile(path) # 判断路径是否为文件
os.path.isdir(path) # 判断路径是否为目录 ,dir为单词directory(目录)的缩写。
os.replace(file1,file2) #将file1重命名为file2,将其替代
替换的例子:
import os
list_test = ['一弦一柱思华年。\n','只是当时已惘然。\n']
with open ('poem3.txt','r') as f:
lines = f.readlines()
with open('poem_new.txt','w') as new:
for line in lines:
if line in list_test:
new.write('____________。\n')
else:
new.write(line)
os.replace('poem_new.txt', 'poem3.txt')
清屏效果
用法:os.system(‘cls’)
import os, time
for i in range(10):
os.system('cls') # 效果:清屏。
print(i)
time.sleep(1)
广告词例子:
import os,time
def main(): #用函数封装,可复用性会高一些(可在其他的.py文件里调用该函数。)
content = '流年,加油呀!' #广告词可自定义
while True:
os.system('cls') #完成清屏,清屏和打印结合起来,形成滚动效果。
print(content)
content = content[1:] + content[0] #这行代码相当于,将字符串中第一个元素移到了最后一个。
time.sleep(0.25) #可以修改时间
if __name__ == '__main__': #类里面学到的检测方法,在函数中也可以用
main()
模块
模块:“.py”后缀的文件即模块
类:使用class语句封装一个类
函数:使用def语句封装一个函数
变量:使用赋值语句赋值一个变量
import语句
- 使用“import(模块名)”导入模块
- 可以使用“import(模块名)as(别名)为模块名取别名
- 导入模块后,在调用模块中的变量/函数/类的时候,要加上“模块名.”格式
模块的运用:
两个文件,
一个test.py文件
另一个main.py文件
main.py文件中:
import test #导入test文件里面的模块
# 直接运行即可
例子:
下面是test.py:
a = '我是模块中的变量a'
def hi():
a = '我是函数里的变量a'
print('函数“hi”已经运行!')
class Go1: # 如果没有继承的类,class语句中可以省略括号,但定义函数的def语句括号不能省
a = '我是类1中的变量a'
@classmethod
def do1(cls):
print('函数“do1”已经运行!')
class Go2:
a = '我是类2中的变量a'
def do2(self):
print('函数“do2”已经运行!')
下面是main.py:
# 这是主程序main.py# 请阅读代码注释
import test # 导入test模块
print(test.a) # 使用“模块.变量”调用模块中的变量
test.hi() # 使用“模块.函数()”调用模块中的函数
print(test.Go1.a) # 使用“模块.类.变量”调用模块中的类属性
test.Go1.do1() # 使用“模块.类.函数()”调用模块中的类方法
A = test.Go2() # 使用“变量 = 模块.类()”实例化模块中的类print(A.a) # 实例化后,不再需要“模块.”
A.do2() # 实例化后,不再需要“模块.”
另一种语句是import…as…
用法:import…as…
比如我们觉得import story太长,就可以用import story as s语句,意思是为“story”取个别名为“s”
导入多个模块
用法:英文逗号隔开
比如import a,b,c可以同时导入“a.py,b.py,c.py”三个文件
from … import … 语句
注意:没有被写在import后面的内容,将不会被导入
- from(模块名)import(制定的内容)
- 导入模块,并且可以直接使用制定的内容(可以是变量、函数、类)
格式:from(模块名)import(制定模块中的变量名/函数名/类名)
效果:
1.导入模块中的制定部分(变量名/函数名/类名)
2.导入后的制定部分可以直接使用,无需加上“模块.”前缀
# 【文件:test.py】def hi():
print('函数“hi”已经运行!')
# 【文件:main.py】
from test import hi # 从模块test中导入函数“hi”
hi() # 使用函数“hi”时无需加上“模块.”前缀
导入多个模块
用法:from xx模块 import a,b,c的形式
if name == ‘main‘语句
if name ==’main‘
- 通常在主模块中使用,表示这是“程序的入口”
- 当该模块作为被导入的模块时,if name == ‘main‘后面的代码不会被运行
xx.py文件:代码块①...... if __name__ == '__main__': 代码块②......
#当xx.py文件被直接运行时,代码块②将被运行。
#当xx.py文件作为模块是被其他程序导入时,代码块②不被运行。
## 下载后查看他人源码
用法:模块.__file__,查找到路径,查看源代码
```python
import random
print(random.__file__)
dir()函数查看模块
dir()函数查看一个模块,看看它里面有什么变量、函数、类、类方法
括号里面可以是模块可以是任意对象
dir()得到一个列表,可以用for i in dir(random)更直观
import random # 调用random模块
print(dir(random))
问题 | 答案 |
---|---|
模块有哪些函数可用? | 通过dir()函数查询 |
有哪些属性或方法可用? | 网上看文档或找教程 |
使用格式是什么? | 从文档或教程中搜集案例 |
其他
__sizeof__()
可以查看内存大小
个人总结,希望对你有帮助。