Python 要求订单不生成订单的链接条件

Python 要求订单不生成订单的链接条件,python,conditional-statements,keyerror,Python,Conditional Statements,Keyerror,每当我用Python(或任何其他语言tbh)链接条件时,我都会不慎问自己这个问题,把我踢出高效的“区域”。 当我链接条件时,通过正确排序,我可以检查条件,如果不先检查其他条件,可能会产生错误 作为示例,让我们假设以下代码段: 如果某个字典中的“attr”和某个字典中的某个值[“attr”]: 打印(“呼呼”) 如果第一个条件不在第一位,或者甚至不存在,那么第二个条件my将生成一个KeyError 我经常这样做只是为了在代码中节省空间,但我一直在想,这是一种好的风格,是否会带来风险,或者是否只是

每当我用Python(或任何其他语言tbh)链接条件时,我都会不慎问自己这个问题,把我踢出高效的“区域”。 当我链接条件时,通过正确排序,我可以检查条件,如果不先检查其他条件,可能会产生错误

作为示例,让我们假设以下代码段:

如果某个字典中的“attr”和某个字典中的某个值[“attr”]:
打印(“呼呼”)
如果第一个条件不在第一位,或者甚至不存在,那么第二个条件my将生成一个
KeyError

我经常这样做只是为了在代码中节省空间,但我一直在想,这是一种好的风格,是否会带来风险,或者是否只是“pythonic”。

更pythonic的方式是“请求原谅而不是允许”。换言之,请使用try-except块:

try:
    if some_value in some_dictionary["attr"]:
        print("Woohoo")
except KeyError:
    pass
一种更具python风格的方式是“请求原谅而不是允许”。换言之,请使用try-except块:

try:
    if some_value in some_dictionary["attr"]:
        print("Woohoo")
except KeyError:
    pass

Python是一种后期绑定语言,这反映在此类检查中。该行为称为。我经常做的一件事是:

def do(condition_check=None):
    if condition_check is not None and condition_check():
        # do stuff
现在,许多人会认为
try:except:
更合适。这真的取决于用例

  • 如果
    表达式在检查可能失败时速度更快,那么请在知道发生了什么情况时使用它们
  • try
    当检查可能成功时,表达式的速度更快,因此请使用它们来防止出现异常情况
  • 如果
    是显式的,那么您就可以准确地知道要检查什么。如果您知道正在发生什么,即强类型情况,请使用它
  • try
    是隐式的,因此您只需关心通话的结果。当您不关心细节时,即在弱类型情况下使用它
  • 如果
    在定义明确的范围内工作-即在执行检查的地方。将其用于嵌套关系,其中要检查最上面的关系
  • try
    适用于整个包含的调用堆栈-可能会在几个函数调用中引发异常。将其用于平坦或定义明确的呼叫

基本上,
if
是一个精确的工具,而
try
是一个锤子-有时你需要精确,有时你只是有钉子。

Python是一种后期绑定语言,这反映在这类检查中。该行为称为。我经常做的一件事是:

def do(condition_check=None):
    if condition_check is not None and condition_check():
        # do stuff
现在,许多人会认为
try:except:
更合适。这真的取决于用例

  • 如果
    表达式在检查可能失败时速度更快,那么请在知道发生了什么情况时使用它们
  • try
    当检查可能成功时,表达式的速度更快,因此请使用它们来防止出现异常情况
  • 如果
    是显式的,那么您就可以准确地知道要检查什么。如果您知道正在发生什么,即强类型情况,请使用它
  • try
    是隐式的,因此您只需关心通话的结果。当您不关心细节时,即在弱类型情况下使用它
  • 如果
    在定义明确的范围内工作-即在执行检查的地方。将其用于嵌套关系,其中要检查最上面的关系
  • try
    适用于整个包含的调用堆栈-可能会在几个函数调用中引发异常。将其用于平坦或定义明确的呼叫

基本上,
if
是一个精确的工具,而
try
是一个锤子-有时你需要精确,有时你只是有指甲。

为什么不
if某个字典中的某个值。get(attr,[]):
?那么你只有一个条件,它是安全的,不受
KeyError
s的影响。当然这适用于这个特定的例子,但我要问的是,在任何条件的更一般的上下文中,这不是很广泛吗?在任何可能的情况下,答案都是在这种情况下做有意义的事情。在这种情况下,使用
dict.get
可以避免出现
KeyError
,如果预期键有时会丢失,或者允许异常在意外情况下传播到调用方。如果某个字典中的某个值存在,为什么不使用
。get(attr,[]):
?那么你只有一个条件,它是安全的,不受
KeyError
s的影响。当然这适用于这个特定的例子,但我要问的是,在任何条件的更一般的上下文中,这不是很广泛吗?在任何可能的情况下,答案都是在这种情况下做有意义的事情。在这种情况下,使用
dict.get
可以避免出现
KeyError
(如果预期键有时会丢失),或者允许异常传播到调用方(如果意外)。