老师留的作业问题

来源:1-4 文件的创建与写入(下)

yyz666

2022-06-17 15:59:32

1.请问老师我这里的异常处理写的有没有问题,为什么最后的f.close()的f是打红色的

2. 另外老师我的endswith的用法有无问题,即如果最后为换行则用return跳出函数

https://img.mukewang.com/climg/62ac33790915a49a07780459.jpg

完整代码如下:

# 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回答

好帮手慕燕燕

2022-06-17

同学,你好!对同学的疑问做如下解答:

1、同学写的异常处理没有问题,但是f.close()放在try语句块下更合理些,有open则有close,没有成功open则无需close,例如以下代码中,path设置为空路径,try下面的文件打开并没有执行,程序执行except语句块,而最后的finally语句也会被执行,此时f是不存在的,执行f.close()会报错

https://img.mukewang.com/climg/62ac41f80954838e09120707.jpg

2、endswith()用法是可以的,可以实现跳出函数

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

https://img.mukewang.com/climg/62ac470d09f7a44107800333.jpg

祝:学习愉快!


0

0 学习 · 4469 问题

查看课程