Pythonic的方式来写许多尝试/除了子句?

我正在编写一个脚本来写入~200个单元格的数据到Excel电子表格。 我的代码遵循这个基本模式:

try: sheet.cell(row=9, column=7).value = getData() except: sheet.cell(row=9, column=7).value = 'NA' 

基本上如果有错误,然后写一些占位符的单元格。 我想知道是不是有一个更短,更pythonic的方式来写这个比200有顺序。

据我所知,getData()调用可能会发生exception。 所以你可以把getData函数换成:

 def get_data_or_default(default="NA"): try: return getData() except Exception: return default 

然后只使用:

 sheet.cell(row=9, column=7).value = get_data_or_default() 

把所有的单元格放到一个列表中,或者更好的是, for i in xrange()循环中获取嵌套的列/行,这样你就可以编写一行代码来执行它们。

 for r in xrange(0, 10): for c in xrange(0, 10): try: sheet(row=r, column=c).value = getData() except BadDataException: sheet(row=r, column=c).value = 'NA' 

但正如其他人所说,如果你可以改变getData,让它返回默认值(或无),而不是引发exception。 如果无法更改getData,请检查文档以查看它是否具有某种default选项,如许多Python对象(例如,带有.get()字典)

更新 :或者,如果你不能自己改变,请参阅Zakhar的包装getData的答案。