老师留的作业问题
来源:1-4 文件的创建与写入(下)
yyz666
2022-06-17 15:59:32
1.请问老师我这里的异常处理写的有没有问题,为什么最后的f.close()的f是打红色的
2. 另外老师我的endswith的用法有无问题,即如果最后为换行则用return跳出函数

完整代码如下:
# coding:utf-8
import os
def create_package(path): # 创建一个包
if os.path.exists(path): # 如果路径存在则抛出异常
raise Exception('%s 已经存在不可创建' % path)
os.makedirs(path)
init_path = os.path.join(path, '__init__.py')
f = open(init_path, 'w') # 创建一个脚本文件__init__.py
f.write('# coding:utf-8\n') # 写入头注释
f.close()
class Open(object):
def __init__(self, path, mode='w', is_return=True):
self.path = path
self.mode = mode
self.is_return = is_return
def write(self,message):
try:
f = open(self.path, mode=self.mode, encoding='utf-8')
if self.is_return:
message = '%s\n' % message # 给文字换行
if message.endswith('\n') == False:
return
f.write(message)
except Exception as e:
print(e)
finally:
f.close()
if __name__ == '__main__':
current_path = os.getcwd()
# path = os.path.join(current_path, 'test1')
# create_package(path)
open_path = os.path.join(current_path, 'b.txt')
o = Open(open_path)
o.write('你好 小慕\n')1回答
同学,你好!对同学的疑问做如下解答:
1、同学写的异常处理没有问题,但是f.close()放在try语句块下更合理些,有open则有close,没有成功open则无需close,例如以下代码中,path设置为空路径,try下面的文件打开并没有执行,程序执行except语句块,而最后的finally语句也会被执行,此时f是不存在的,执行f.close()会报错

2、endswith()用法是可以的,可以实现跳出函数
有一点需要注意,endswith()用于判断字符串是否以指定后缀结尾,以指定后缀结尾返回True,否则返回False。同学已为字符串拼接\n,而if条件却要判断是否等于False,这是由于\n被转义成真正的换行,不是原始的字符串"\n",可以在字符串前面加r,使其不被转义,\n 表示 \ 和 n 两个字符

祝:学习愉快!
相似问题