仅记录个人学习Python所学,学识浅薄,若有错误欢迎指出。文章可能会不太完善,后续可能会继续更新。
一、异常
两种容易辨认的错误
语法错误:一些关于语法的错误【缩进】
异常:代码完全正确,但是,程序运行之后,会报出 的错误
常见的错误
NameError:变量未被定义
TypeError:类型错误
IndexError:索引异常
AttributeError:属性异常
ImportError:导入模块的时候路径异常
SyntaxError:代码不能编译
UnboundLocalError:试图访问一个还未被设置的局部变量
SyntaxError: 语法错误
ZeroDivisionError : division by zero 除0错误
处理方式:
捕获异常
抛出异常
# 异常 Exception
# 错误:error
# 异常处理: 异常捕获
# 作用:防止代码报错,导致后面的程序无法执行
try:
a = 10 / 0
print(a)
except Exception as e:
print('不能除0', e)
# try:
# a = a + 1
# except ZeroDivisionError as e:
# print('除0 错误了', e)
# except NameError as e:
# print('未定义 错误', e)
try:
a = 1 / 0
except Exception as e:
print(e)
# try-except-else
# 当程序未出错时else才会执行
try:
a = 1 / 1
print('a =', a)
except Exception as e:
print(e)
else:
print('未出错')
print()
# try-except-finally
# finally 无论程序是否出错都会执行
try:
a = 1 / 1
print('a =', a)
except Exception as e:
print(e)
finally:
print('不管有没有错,我都会最后执行')
# 抛出异常:让程序报错
# raise NameError('哈哈,这是我抛出的错误!')
# 自定义异常
class MyException(Exception):
def __init__(self, code):
self.code = code
try:
raise MyException('1001')
except Exception as e:
print(e)
print(type(e)) # <class '__main__.MyException'>
# 断言assert: 预测
def f(n):
assert n != 0, 'n不能为0'
# 预测n != 0 :
# 如果预测成立,则正常执行
# 如果预测不成立,则抛出错误
# AssertionError: n不能为0
a = 1 / n
print(a)
f(2)
# f(0)
二、文件操作
因为文件操作容易修改文件和报错,这里大部分语句执行一遍就都注释掉了
# 文件操作
# 1. 打开文件
# 2. 操作文件:读 写
# 3. 关闭文件
# 1.打开文件
# r: 只读 如果文件不存在,则报错
# rb: 只读二进制 如果文件不存在,则报错
# w: 清空写 如果文件不存在,则自动创建文件
# wb: 清空写二进制 如果文件不存在,则自动创建文件
# a: 追加写 如果文件不存在,则自动创建文件
# ab: 追加写二进制 如果文件不存在,则自动创建文件
# fp:文件句柄,指向aaa.txt文件的对象
# fp = open('aaa.txt', 'r', encoding='UTF-8')
# fp = open('aaa2.txt', 'w', encoding='UTF-8')
# fp = open('aaa3.txt', 'a', encoding='UTF-8')
# fp = open('aaa.txt', 'rb')
# fp = open('aaa2.txt', 'wb')
fp = open('aaa3.txt', 'ab')
# print(fp) # <_io.TextIOWrapper name='aaa.txt' mode='r' encoding='cp936'>
# 2.操作文件
# 读取read
# print(fp.read()) # 读取所有内容
# print(fp.read(6)) # 读取前6个
# print(fp.read(6)) # 读取后续6个
# print(fp.readline()) # 读取下一行
# print(fp.readline())
# print(fp.readlines()) # 读取所有行
# print(fp.read().decode())
# 写入 write
# fp.write('你好')
# 写二进制时,需要进行编码,不然会报错
fp.write('你好'.encode())
# 3.关闭文件
# fp.close()
# with-as : 会自动关闭文件
with open('aaa2.txt', 'w', encoding='utf-8') as fp:
# print(fp.read())
fp.write('aa')
fp.flush() # 刷新缓冲区 当需要写入大量内容时,刷新缓冲区,可以加快写入速度
# try:
# fp2 = None
# fp2 = open('aaa.txt', 'r')
# a = 1/0
# except Exception as e:
# print(e)
# finally:
# if fp2:
# print('fp2关闭')
# fp2.close()
三、csv文件
这里打开虽然是Excel 打开但是文件并不是Excel文件
# csv文件读写
import csv
def read_csv(path):
fp = open(path, 'r', encoding='utf-8')
# print(fp.read())
# csv 读取
reader = csv.reader(fp)
print(list(reader), type(reader))
# [['username', 'password', 'age', 'address'], ['zhangsan', 'abc123', '17', 'china'],
# ['lisi', 'aaabbb', '10', 'england']] <class '_csv.reader'>
for row in reader:
print(row)
fp.close()
def write_csv(path):
fp = open(path, 'a', encoding='utf-8', newline='')
# csv写入
writer = csv.writer(fp)
# writer.writerow(['wangwu', '1234556', 19, 'sz'])
writer.writerows([['wangwu', '1234556', 19, 'sz'], ['123', '1236', 99, 'sz']])
fp.close()
if __name__ == '__main__':
# read_csv(r'C:\Users\xx\Desktop\Python2004\week03\day14\doc\text.csv')
write_csv(r'C:\Users\xx\Desktop\Python2004\week03\day14\doc\text.csv')