擅长:python、mysql、java
<p>利用<code>with</code>语句,最好的“Pythonic”方法列为<a href="http://www.python.org/dev/peps/pep-0343/">PEP 343</a>中的示例6,它给出了语句的背景。</p>
<pre><code>@contextmanager
def opened_w_error(filename, mode="r"):
try:
f = open(filename, mode)
except IOError, err:
yield None, err
else:
try:
yield f, None
finally:
f.close()
</code></pre>
<p>使用如下:</p>
<pre><code>with opened_w_error("/etc/passwd", "a") as (f, err):
if err:
print "IOError:", err
else:
f.write("guido::0:0::/:/bin/sh\n")
</code></pre>