Python 尝试…除非…否则v嵌套尝试…除非
向前推进:Python 尝试…除非…否则v嵌套尝试…除非,python,Python,向前推进: try: f = open('foo', 'r') except IOError as e: error_log.write('Unable to open foo : %s\n' % e) else: data = f.read() f.close() 我想到,else子句解决的极端情况仍然可以通过嵌套尝试来避免…除了避免需要else?: try: f = open('foo', 'r') try: data = f.read() f.cl
try:
f = open('foo', 'r')
except IOError as e:
error_log.write('Unable to open foo : %s\n' % e)
else:
data = f.read()
f.close()
我想到,else子句
解决的极端情况仍然可以通过嵌套尝试来避免…除了
避免需要else
?:
try:
f = open('foo', 'r')
try:
data = f.read()
f.close()
except:
pass
except IOError as e:
error_log.write('Unable to open foo : %s\n' % e)
事实上,并非总是需要您可以简单地执行以下操作:
f = None
try:
f = open('foo', 'r')
except IOError:
error_log.write('Unable to open foo\n')
if f:
data = f.read()
f.close()
try..except..else
可能不需要,但也可以很好。在本例中,我认为try..except..else
形式明显更好
仅仅因为您可以不使用语法元素,并不意味着它就没有用处。Decorator语法纯粹是语法糖(我认为这是最明显的例子),for
循环只是美化了,而循环等等。有一个很好的地方可以尝试,除了,其他地方,我想说这就是这样一个地方
此外,这两段代码远远不是等价的。如果f.read()
引发异常(磁盘读取错误、文件中的数据损坏或其他类似问题),第一个异常将引发它应该引发的异常,但第二个异常将丢失,并认为一切正常。就我自己而言,我更喜欢这样的东西,更短,更容易理解:
try:
with open('foo', 'r') as f:
data = f.read()
except IOError as e:
error_log.write('Unable to open foo : %s\n' % e)
(这假设您想捕获文件中的错误。读取和文件。关闭。我真的不明白您为什么不这样做。)但是,您正在调用无上的读取()
,这会引发属性错误您确定“if not f”会起作用吗?我想应该是“如果你是对的”。固定的。我不该再接电话了,去睡觉吧;)这仍然很不符合Pythonic。我不知道wining answer上使用的方法非常酷。运行Python2.5时,无法使代码正常工作。我得到了无效的语法。@eryksun:啊,是的,忘了。我只是查看了Python文档,只说了“2.5版中的新版本”。没有提到需要导入的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。Python文档中的“复合语句”页面没有提到它是何时添加的。。。我真的不记得了。