这是正确的方式来使用python“with”语句结合try-except块吗? try: with open("file", "r") as f: line = f.readline() except IOError: <whatever> 如果是这样,那么考虑旧的做事方式: try: f = open("file", "r") line = f.readline() except IOError: <whatever> finally: f.close() 这里的“with”语句的主要好处是我们可以摆脱三行代码? 这个用例对我来说似乎并不令人信服(尽pipe我明白“with”语句有其他用途)。 编辑:上述两个代码块的function是否相同? 编辑2:前几个答案一般谈到使用“与”的好处,但在这里似乎边际利益。 我们已经(或应该已经)明确地调用f.close()多年了。 我想一个好处是,马虎编码器将受益于使用“与”。
考虑以下: with open(path, mode) as f: return [line for line in f if condition] 文件是否会被正确closures,或者使用return绕过上下文pipe理器 ?
Alan Storm在回答关于with声明的回答时的评论使我想到了。 我很lessfind使用这种特定语言function的理由,也从来没有考虑过如何引起麻烦。 现在,我很好奇,如何能够有效地使用,而避免它的陷阱。 你在哪里发现with语句有用?
今天我第一次碰到Python。 我已经使用了Python几个月,甚至不知道它的存在! 鉴于其有些模糊的地位,我认为这值得提问: 什么是Python语句devise用于? 你用它做什么? 是否有任何我需要注意的问题,或与其使用相关的常见反模式? 任何情况下,最好使用try..finally比with ? 为什么它不被广泛使用? 哪些标准库类与它兼容?