2017-01-11 4 views
-1

多くの場合、問題を解決するためにif-elsetry-exceptの両方の句を使用できるケースがあります。その結果、私は、手元の課題を達成するために特定の条項の使用を決定する(そして正当化する)ことにいくつかの混乱があります。例えば
、私たちは些細な状況を考えてみましょう:私は2つの間でよりPython的方法を決定し、それを正当化することができますどのようにtry節とelse節の比較

In []: user = {"name": "Kshitij", "age": 20 } 

# My motive is to print the user's email if it is available. 
# In all other cases, a warning message needs to be printed 

# Method-01 : Using try clause 
In []: try: 
    ...:  print(a["email"]) 
    ...: except KeyError: 
    ...:  print("No EMAIL given") 
    ...:  
No EMAIL given 

# Method-02 : Using if-else clause 
In []: if "email" in a: 
      print(a["email"]) 
    ...: else: 
    ...:  print("No EMAIL given") 
    ...:  
No EMAIL given 

私が知りたいのです。また、類似のシナリオを解決するためのいくつかの方法をどのように区別できるかについてのいくつかの指針は、本当に役立つでしょう。

+0

これはあなたの質問に答えるのではなく、3番目の選択肢です: 'print(a.get(" email "、" EMAIL指定なし "))' ;-) – Kevin

+0

私はこれが重複しているとは思わない。私の意見では、これはすべての場合の合併です。私はちょうど別の質問に関連した例を挙げたばかりです。 –

+0

@Kevinここでの動機は、それを「取得」するのではなく、むしろそれを表示することなので、「与えられたEMAILはない」というのは、Pythonの悪い構成です。 –

答えて

0

このケースが例外であり、通常のケースではない場合は、例外を使用する必要があります。

1

try/catchとif/elseは互換性がありません。前者はスローされる可能性のあるエラーを捕捉するためのものです。文がそれを行うことができるなら、いいえ。 if/elseは、条件が真か偽かをチェックするためのものです。 if/elseブロックにスローされたエラーは捕捉されず、プログラムはクラッシュします。

0

if/then:内部アプリケーションフロー制御用。受信機の状態は、コードの外部にあるシステムコールとAPI呼び出しのため:エラーは除き/試みる

致命的ではないようです。失敗は致命的になり、明示的に処理する必要があります

0

"Pythonic"をお探しの場合はどちらも該当しません。

print a["email"] if "email" in a else "No EMAIL given" 

これはPythonicです。しかし、質問に戻る:まず第一に、あなたは何をすべきかを決める。 - 私はそれらの2つの間の文章慣習を知らない。しかし、私はそれを見るように:

if-elseは主に期待挙動を検出するために使用されている - 私が意味する、「電子メール」はaにない場合、それはexcpectableです。したがって、if-elseを使用します。
例はあなたのコードです。

たとえば、文字列に数値が含まれているかどうかを確認する場合は、tryを数値に変換します。失敗した場合は、ifステートメントを使用して予測するのが少し難しいので、try-exceptを使用します。
は、ここでそのための短い例です:もちろんの

def is_numeric(string): 
    try: 
     a = float(string) 
     return True 
    except: 
     return False 
  • は、文字列が数値であるかどうかを確認するためのより良い方法があり、それはただの例では、try-exceptのを使用ました。
関連する問題