2016-09-12 4 views
1

Excelのスプレッドシートに〜200セルのデータを書き込むためのスクリプトを書いています。私のコードはこの基本パターンに従っています:多くのtry/except節を書くPythonの方法?

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

基本的にエラーがある場合は、セルにプレースホルダを書きます。私は、これらのうち200個を順番に持つよりも、これを書くための、より短く、より平凡な方法があるかどうか疑問に思っていました。

+0

例外を絞り込むことができない場合はありません。このtry/exceptコンストラクトは他のものがないと悪いデザインです。 –

+5

私が誤解していない限り、例外を発生させる代わりに 'getData'にNAを返すべきです –

答えて

7

私が理解するように、getData()呼び出しで例外が発生する可能性があります。だから、としての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() 
+0

私はこれが正しいと願っています。もしそうでなければ、例外は代入から来ています。つまり、 'getData()'はExcelファイルに書き込めない値を返すことができます。 –

+0

ところで、@ erik-sn:上記のコードでExceptionをあなたが起こると予想される特定の例外に置き換えてください。それ以外の場合は、デバッグを非常に困難にする、他の例外をキャッチしてはいけません。 – spectras

+0

@spectras:これは 'getData'のドキュメンテーションがどれほど良いかという問題です。いくつかのPython標準モジュール関数でさえ、実際にあなたが上げることができるすべての例外を教えてくれるわけではありません。 –

0

リストにすべてのあなたの細胞を入れ、またはより良い、あなたができるように、ネストされたfor i in xrange()ループから列/行を取得しますそれらのすべてで実行するコードを1行書きます。

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を変更することができれば他の人として、言及している、それがデフォルト(またはNone)を返してい代わりに例外を上げます。それとも、のgetDataをラップするザハールの回答を参照してください。あなたがたgetDataを変更できない場合は、多くのPythonオブジェクト(例えば、.get()と辞書)のように、それはいくつかの種類のdefaultオプションを持っているかどうかを確認するために

UPDATEをマニュアルで確認してくださいあなた自身でそれを変更することができない場合。

関連する問題