在下面的代码中,哪个更有效/更“Pythonic”?使用try-catch子句还是if-else子句?
fname = 'AdobeARM.log'
letters = {}
with open(fname,'r') as f:
for line in f:
for c in line:
try:
letters[c] += 1
except KeyError:
letters[c] = 1
print letters
VS.
fname = 'AdobeARM.log'
letters = {}
with open(fname,'r') as f:
for line in f:
for c in line:
if letters.has_key(c):
letters[c] += 1
else:
letters[c] = 1
print letters
我倾向于使用try catch选项,但我不确定为什么。
发布于 2012-09-10 04:52:37
更具pythonic风格的是使用专门的工具来完成这项工作:
from collections import Counter
with open(fname, 'r') as f:
letters = Counter(f.read())
还要注意的是,为了支持in
,has_key
被弃用了。
发布于 2014-04-19 03:14:48
看看你是否可以使用这个技巧来处理异常。
adict = {}
default = None
val = adict.get('dogname', default)
# val will be None rather than raise an exception.
https://stackoverflow.com/questions/12342822
复制相似问题