一个让运维崩亭填的经典现场
想象一下这个场景:你写了个Python脚本,跑在服务器上,一切正常。三天后,运维大哥冲冲冲冲冲冲刽到你工位:“你的破脚本把服务器的文件句柄吃完了!”你一脸无辺:“我就开了几个文件啊?”然后他甩出一张lsof的截图——三万个打开的文件。这个问题的根源是什么?你开了文件,没关。
with语句:你妈喊你随手关文件
with open('data.txt', 'r') as f: data = f.read() # 缩进结束,文件自动关闭
这就是context manager的威力。它保证无论你的代码是正常结束还是半路炸了,文件都会乖乖被关上。
context manager不止关文件
这东西用处可大了:数据库连接:用完自动提交或回滚线程锁:自动acquire/release临别目录:用完自动删除测试断例:pytest.raises(ValueError)
人生教训
写Python的时候:能用with的,绝不用手动close。这不仅是代码风格问题,是一个程序员的职业素养。