python之地基(四)
一、python内的名称空间及作用域
#内置名称空间:(python启动时就有)python解释器内置的名字,print,max,min
#全局名称空间:(执行python文件时启动)定投定义的变量
#局部名称空间:(调用函数时启动,调用结束失效)函数内部定义的变量
总结:三者的加载顺序
内置--->全局--->局部
三者的访问顺序
局部--->全局--->内置
在函数体内时,先访问函数体内的,如果没有向上一级(上一级函数或者全局)查找,还是没有的话就去内置里面去查找。
x=4 defa(): x=3 defb(): x=2 defc(): x=1 print(x) c() b() a() ‘‘‘ 如上述代码所示, 执行结果为1,如果x=1不存在, 那么向上一级寻找答案,那么得出结果为2. ’’’
二、异常处理
什么是异常?
异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
一般情况下,在python无法正常处理程序时就会发生一个异常。
异常时python对象,表示一个错误
当python脚本发生异常时我们需要捕获处理它,否则程序会中止执行。
异常处理:
捕获以后才能可以使用try/except语句。
try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理
如果你不想在异常发生时结束,你的程序,只需在try里捕获它。
========================================================== try: print(a) except: print('错误') finally:#不管代码成功与否都执行finally的代码块 print('执行完毕') ========================================================== try: print(a) except NameError:#捕捉错误类型 print('变量没定义') #打印出来的是括号里的 ========================================================== try: print(a) except NameError as e:#捕捉原生错误 print(e) =========================================================== 处理多个异常 try: print(a) int('aaa') except NameError as e1: print(e1) except ValueError as e2: print(e2) ========================================================== 自定义异常 Class MyError(Exception): def__init__(self,age): self.age=age def ag(): age=int(input('输入年龄:')) if age<=0orage>100: raise MyError('年龄只能在0到100岁之间') try: ag() except MyError as e: print(e)
三、文件处理
#在python3中如何打开一个文件呢?
f = open('lock.txt', 'r',encoding='utf-8')#应用程序向操作系统发起打开文件的操作
print(f.read())#操作系统打开文件得到文件句柄返回给应用程序并赋值给f
f.close()#应用程序向操作系统发起关闭文件的信号,并且回收变量f
#注意:操作完文件后一定要记得关闭,因为如果开的文件多了,不关闭,会浪费系统资源,使系统变慢
#但是还是有很多同学忘记关闭文件,因此,可以用下面这个方式
with open('lock.txt', 'r', encoding='utf-8') as f:
print(f.read())
#这里要注意字符编码,秉承一个原则就不会出现乱码(用什么方式写的,就用什么方式打开)
r ,#只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,#只写模式【不可读;不存在则创建;存在则清空内容】 a, #之追加写模式【不可读;不存在则创建;存在则只追加内容】 #以下三种跟上面三种一样,只不过是以二进制方式 rb wb ab 文本打开的常用模式 r,w,a
操作文件的方法
#掌握
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中
f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
#了解
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #关闭文件
f.flush() #立刻将文件内容从内存刷到硬盘
f.name #查看打开的文件名
操作文件的方法
view code
f.seek(0,0)等价于f.seek(0)#代表把光标移动到开头 f.seek(2,1)#代表在相对位置移动2个字节(1代表光标的相对位置,2代表在相对位置上把光标向后移动2个字节) f.seek(-3,2)#代表在末尾往前移动3个字节(2代表把光标移动到末尾,-3代表把光标向前移动3个字节) f.read(3)代表读取3个字符(意思是光标在第三个字节后面) 光标位置移动 光标移动