学习Python第13天_异常处理&文件操作

仅记录个人学习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')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值