通常,我遇到的情况是,我发现if-else
和try-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方法并证明其合理性。此外,一些指示如何区分几种方法来解决类似的情况将是非常有帮助的。
答案 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
的示例。