# coding=utf-8 # try常用于异常处理 # 编程中最多的就是bug,还有bug的孩子报错 # 当遇到这些报错的时候我们可以用try捕获 tryTest = 0 # 用于测试的代码 try: # 检测块内的代码报错不 tryTest /= 0 except: # 如果try判断报错,就使用except下面的代码 print("错了") try: # 检测块内的代码报错不 tryTest /= 0 except Exception as a: # exception是错误类型,a是exception的别名 print(a) except ZeroDivisionError: # 都可以设置多个except,但是如果匹配了那么不会向下执行 # exception是错误类型,a是exception的别名 print("指定捕获类型") # 多重异常捕获 try: tryTest /= 0 except (ValueError, ZeroDivisionError) as a: # 要不用exception,哈哈哈 print(a) # 还能嵌套? try: tryTest /= 0 except: try: tryTest /= 0 except: print("嵌套") # finally:对异常处理,无论是否正确,我们都要释放资源,都会执行finally # 即便是except中有return也要执行finally # 如果 finally 块中有 return 或 raise 语句,则它会覆盖 try 或 except 中的返回值或异常。 def func(): try: return 1 finally: return 2 # 这个返回值会覆盖 try 块中的返回值 print(func()) # 输出 2 # 自定义一些异常就是自定义异常类,大公司用,不用管 class 自定义异常(Exception): def __init__(self, 异常消息): super().__init__(异常消息) try: tryTest /= 0 except Exception as a: # raise 自定义异常("不能为0") # raise 跟一个异常参数可以抛出异常,通常用于抛出自定义异常 print(a) print(''' 为什么会有try? 因为py是解释语言,会一句句的解释执行,所以遇到错误就会终止 为了避免,就有了try ''') # ------------------------------------------------------ print(f"{"文件操作":*^100}") # 打开-读写(文本、二进制)-关闭 f = "注意使用了try要在外定义文件,比如finally就会识别不到文件,无法close" try: # 可以不要,但是有些时候文件异常退出,使用finally可以保证保存 f = open('test.txt', 'r+', encoding='utf-8', errors='strict') # open('文件路径带扩展名','操作模式',encoding='文件编码',errors='错误时处理方式,ignore表示忽略') # 'r':只读模式。如果文件不存在,则抛出 FileNotFoundError。 # 'w':写入模式。如果文件存在,会清空文件;如果文件不存在,会创建新文件。 # 'a':追加模式。在文件末尾追加内容。 # 'b':以二进制模式打开文件(如 rb,wb)。 # 'x':创建新文件并写入。如果文件已经存在,则抛出 FileExistsError。 # '+':读写模式,如 'r+'(读写模式,文件必须存在),'w+'(写入模式并清空文件),'a+'(追加读写模式)。 f.write("你好") # 写入数据,写入数据后,文件指针会位于文件末尾,接下来调用 f.read() 将从文件指针当前位置开始读取。 # writelines:写入一个字符串列表 f.flush() # 确保写入的数据立即被刷新到文件中,而不是留在缓冲区里。 f.seek(0) # 将文件指针移动到文件的开头,以便接下来能够读取整个文件内容。 ftxt = f.read() # 读全文 # readline读一行,如果在末尾就返回空 # readlines将文章读入字符串列表,每一行就是一个元素 print(ftxt) finally: #可以不要 f.close() # 要注意finally中的f f = open('b.png', 'rb+') # 没有ending与error ff = f.read() print(ff) f.close() # 麻烦啊,为什么要用try,对了可以用with as print("*"*50) print(''' ' with ... as 是 Python 中的一种上下文管理器语法,主要用于确保资源在使用后能自动释放,避免手动调用 close() 方法或其他清理操作。 with 语句的背后是上下文管理协议,它使用了两个特殊方法: __enter__():在进入 with 块时调用,返回的值通常被赋给 as 后面的变量。 __exit__():在 with 块结束时(无论是正常退出还是发生异常)调用,用于进行清理操作(如关闭文件、释放锁等)。 常见应用场景: 文件操作:使用 with 确保文件在使用后自动关闭。 数据库连接:确保数据库连接关闭。 线程锁:确保线程锁在使用完后自动释放。 ' ''') print(f"{"开始操作复制文本文件":*^50}") with open('test.txt', 'r+', encoding='utf-8', errors='ignore') as f: # test文件之前就有了所以直接用,注意编码 ff=f.read() with open('test_cp.txt', 'w', encoding='utf-8') as f: # test_cp之前没有,所以用w,创建,为什么不要x,因为w会覆盖,x如果有了就报错 f.write(ff) print('文本文件成功') print(f"{"开始操作复制二进制文件":*^50}") with open('b.png', 'rb+') as f: # 注意rb,注意没有编码也没有error ff=f.read() with open('b_cp.png', 'wb') as f: # 注意wb,没有编码与error f.write(ff) print('二进制成功') # 文件目录管理操作(用到os库) import os # 目录操作:不写目录位置就操作当前目录 print(os.listdir("../../")) #查看目录 # os.mkdir("test") # os.mkdir("test/test1") # 创建目录 # os.rmdir("test") # 删除目录(空目录) # 使用shutil模块可以递归删除多层非空目录 # import shutil # shutil.rmtree('test') # 删除多层 print(os.getcwd()) # 获取当前目录 # os.chdir('修改工作目录') print(os.path.isdir("test")) #判断是否为目录 print(os.path.isfile('006try与文件操作.py')) # 判断是否为文件 # 文件操作 # os.remove('test.txt') # os.unlink('b_cp.png') # 删除文件:两个都只可以删除文件 os.rename("旧名字","新名字") # 可以修改文件也可以修改目录 # 要注意,如果新名字是一个存在文件/目录的名字,那么就会由那个存在的覆盖 # 所以建议判断一下,加个衣服(if),案例如下: if not os.path.exists('目录或者文件位置'): os.rename("old","new") else: print("新名字存在了")
py第六天:try与文件操作
于 2024-09-09 20:05:58 首次发布