异常处理、深浅拷贝、基本的文件操作

一、异常处理

​ 异常有分为语法错误和逻辑错误

1、异常的种类

1.1 常用异常

  • AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
  • IOError 输入/输出异常;基本上是无法打开文件
  • ImportError 无法引入模块或包;基本上是路径问题或名称错误
  • IndentationError 语法错误(的子类) ;代码没有正确对齐
  • IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
  • KeyError 试图访问字典里不存在的键
  • KeyboardInterrupt Ctrl+C被按下
  • NameError 使用一个还未被赋予对象的变量
  • SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
  • TypeError 传入对象类型与要求的不符合
  • UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
  • ValueError 传入一个调用者不期望的值,即使值的类型是正确的

2、异常处理

2.1 之后预防处理

如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理

#基本语法为
try:
    被检测的代码块
except 异常类型:
    try中一旦检测到异常,就执行这个位置的逻辑
    
#  举例
try:
    f = [
        'a',
        'a',
        'a',
        'a',
        'a',
        'a',
        'a',
    ]
    g = (line.strip() for line in f)
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
    print(next(g))
except StopIteration:
    f.close()

2.2 万能异常处理:Exception

别的基本用不到,Exception是万能的

s1 = 'hello'
try:
    int(s1)
except Exception as e:
    print(e)

二、数据类型分类

按存值个数区分

存值个数数据类型
单个值整型、浮点型、字符串
多个值列表、字典、元组、集合

按可变不可变区分

可变or不可变数据类型
可变列表、字典、集合
不可变整型、浮点型、字符串、元组

按有序无序区分

有序or无序数据类型
有序字符串、列表、元组
无序字典、集合

按访问类型区分

访问类型数据类型
直接访问整型、浮点型
顺序访问(序列类型)字符串、列表、元组
key值访问(映射类型)字典

三、python深浅拷贝

1、拷贝

list2是list1的拷贝对象,list1内的任何数据类型的元素变化,list2都会跟着变化,因为列表是可变类型

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = l1

l1.append('g')
print(l1)  # ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
print(l2)  # ['a', 'b', 'c', ['d', 'e', 'f'], 'g']

2、浅拷贝

需导入一个包:import copy,list2=copy.copy(list1),list2是list1的浅拷贝对象,list1内的不可变数据类型元素发生改变,list2不变;list1内的可变数据类型元素发生改变,list2会跟着改变

import copy

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.copy(l1)

l1.append('g')
print(l1)   # ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
print(l2)   # ['a', 'b', 'c', ['d', 'e', 'f']]

l1[3].append('g')
print(l1)   # ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
print(l2)   # ['a', 'b', 'c', ['d', 'e', 'f', 'g']]

3、深拷贝

需导入一个包:import copy,list2=copy.deepcopy(list1),list2是list1的深拷贝对象,list1内的不可变数据类型元素发生改变,list2不变;list1内的可变数据类型元素发生改变,list2也不会改变。即list2永远不会因为list1的改变而改变

import copy

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.deepcopy(l1)

l1.append('g')
print(l1)   # ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
print(l2)   # ['a', 'b', 'c', ['d', 'e', 'f']]

l1[3].append('g')
print(l1)   # ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
print(l2)   # ['a', 'b', 'c', ['d', 'e', 'f']]

四、基本的文件操作

1、打开文件

f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt')
print(f)

打开文件需要注意编码格式,我的电脑打开文件必须在open里加入encoding='UTF-8'

f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt',encoding='UTF-8')
print(f)

2、读取数据

打开文件之后,文件不仅占用了内存,他还对应了操作系统打开的以文件,相当于使用文本编辑器打开了一个文件。并且我们说了我们操控文件只是为了读和写,因此打开文件并不是目的,读和写才是目的,接下来我们尝试如何读写文件。


f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='r')  # read模式打开文件

data = f.read()
print(data)   # 读取文件内容,向操作系统发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存

f.close()  #  关闭文件 # 由于Python的垃圾回收机制只回收引用计数为0的变量,但是打开文件还占用操作系统的资源,所以我们需要回收操作系统的资源资源
# del f 只是回收变量f

3、写入数据

# write模式打开文件
f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='w')
f.write("""name = 'nick'
pwd = '123'""")
f.close()
f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='r')
data = f.read()
print(data)

五、绝对路径和相对路径

1、绝对路径

  • Windows系统绝对路径从盘符(C:、D:)开始写一个完整的路径。
  • macos系统从根目录(/Users)开始写一个完整的路径。

2、相对路径

相对于当前执行文件所在的文件夹开始找。

f = open('32.txt')  # 32.txt与该.md文档同路径位置

转载于:https://www.cnblogs.com/zhuangyl23/p/11312175.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值