Python中无返回值return语句的作用及save方法改造方案
关于Bank类save方法的两个问题解答
问题1:save方法里无返回值的return语句有啥用?能删吗?
- 作用:这个return是用来提前终止方法的。当调用
save()时既没传fileName参数,实例自身的self.fileName又是None的话,要是没这个return,代码会跑到open(self.fileName, "wb")那一步——open根本不能拿None当文件名,直接就抛TypeError异常崩了。说白了这就是个简单的防御性校验,缺必要参数就直接退,别往下走搞出错误。 - 能不能删?绝对不能直接删。删了之后刚才说的场景下肯定报错。要是真想去掉这个return,得补上对应的异常处理或者额外的参数检查(比如主动抛个明确的错误提示),但原代码就是用return快速退出,属于简洁的写法。
问题2:怎么改save方法,让它在缺文件名时提示用户输入?
用Python的input()函数就能实现,在缺少文件名的分支里加个输入提示,拿到用户输入的文件名后赋值给self.fileName,再继续执行保存逻辑。修改后的代码如下:
import pickle def save(self, fileName = None): """Saves pickled accounts to a file. The parameter allows the user to change filenames.""" if fileName != None: self.fileName = fileName elif self.fileName == None: # 提示用户输入文件名 self.fileName = input('Please provide a name for the file to be saved: ') # 可选:防止用户输入空字符串,循环提示直到输入有效内容 while not self.fileName.strip(): self.fileName = input('File name cannot be empty. Please enter again: ') # 改用with语句自动管理文件,避免手动关闭的遗漏 with open(self.fileName, "wb") as fileObj: for account in self.accounts.values(): pickle.dump(account, fileObj)
补充说明:
- 调用
bank.save()且无传入文件名、实例fileName为None时,会弹出输入提示; - 加了空输入校验,避免用户输空字符串导致后续操作出错;
- 把原代码的
open+close改成with语句,不用手动关文件,更安全也更简洁; - 用户输入的文件名会存在
self.fileName里,之后再调用save()不传参数的话,会直接用这个文件名。
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

