try子句vs if else子句

时间:2017-01-11 19:38:47

标签: python if-statement try-except

通常,我遇到的情况是,我发现if-elsetry-except条款都可用于解决问题。因此,我有一些困惑决定(并证明)使用特定条款来完成手头的任务。
例如,让我们考虑一个微不足道的情况:

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

我想知道如何在两者中确定更多的Pythonic方法并证明其合理性。此外,一些指示如何区分几种方法来解决类似的情况将是非常有帮助的。

4 个答案:

答案 0 :(得分:1)

try / catch和if / else不可互换。前者用于捕获可能引发的错误。如果声明可以做到这一点。 if / else用于检查条件是真还是假。在if / else块中抛出的错误将不会被捕获,程序将崩溃。

答案 1 :(得分:0)

如果此案例是例外而非正常情况,则应使用例外。

答案 2 :(得分:0)

if / then:用于内部应用程序流控制。错误不太可能是致命的

VS

try / except:用于系统调用和API调用,其中接收器的状态在代码外部。失败可能是致命的,需要明确处理

答案 3 :(得分:0)

如果您正在寻找“Pythonic”,那么这些都不是。

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

现在是Pythonic。但是,回到这个问题:首先,你决定做什么 - 我不知道这两者之间的任何书面约定。但是,正如我所看到的那样:

if-else主要用于检测可预期的行为 - 我的意思是,如果“电子邮件”不在a中,则可以理解。所以我们将使用if-else 一个例子就是你的代码。

但是,例如,如果我们想检查字符串是否包含数值,我们将try将其转换为数字。如果失败了,那么使用if语句预测它会更难,所以我们将使用try-except
以下是一个简短的例子:

def is_numeric(string):
    try:
        a = float(string)
        return True
    except:
        return False
  • 当然有更好的方法可以检查字符串是否为数字,只是try-except示例