Python 无错误地检查和访问数组元素

Python 无错误地检查和访问数组元素,python,if-statement,exception,Python,If Statement,Exception,我有一个数组,我想验证它,数组的第二项。我想到了两种方法 检查数组长度 if len(array) > 1: # Process for array[1] 捕获索引器并在else块中处理 try: array[1] except IndexError: pass else: # Process for array[1] 哪一个更好 如果您还有其他选择,我准备学习:)Python鼓励: EAFP 请求原谅比允许更容易。这是一条常见的Python 编码样

我有一个数组,我想验证它,数组的第二项。我想到了两种方法

  • 检查
    数组
    长度

    if len(array) > 1:
        # Process for array[1]
    
  • 捕获
    索引器
    并在
    else
    块中处理

    try:
        array[1]
    except IndexError:
        pass
    else:
        # Process for array[1]
    
  • 哪一个更好

    如果您还有其他选择,我准备学习:)

    Python鼓励:

    EAFP
    请求原谅比允许更容易。这是一条常见的Python 编码样式假定存在有效的键或属性,并且 如果假设被证明是错误的,则捕获异常。这件衣服又干净又快 风格的特点是有许多不同的风格 声明。这项技术与许多人所共有的风格形成了鲜明对比 其他语言,如C

    这意味着
    try
    /
    except
    非常好,但您不必使用
    else
    子句,只需执行以下操作:

    try:
        # Process for array[1]
    except IndexError:
        pass
    
    Python鼓励:

    EAFP
    请求原谅比允许更容易。这是一条常见的Python 编码样式假定存在有效的键或属性,并且 如果假设被证明是错误的,则捕获异常。这件衣服又干净又快 风格的特点是有许多不同的风格 声明。这项技术与许多人所共有的风格形成了鲜明对比 其他语言,如C

    这意味着
    try
    /
    except
    非常好,但您不必使用
    else
    子句,只需执行以下操作:

    try:
        # Process for array[1]
    except IndexError:
        pass
    

    如果您的数组应至少包含2项,我将执行断言:

    assert len(array) > 1, "Array should have at least 2 items"
    
    如果您的数组可以有2项,我将使用第一种形式:

    if len(array) > 1:
        # Process for array[1]
    

    对我来说,从长远来看,try表单的可读性可能会降低,特别是如果您需要捕获“数组[1]的进程”部分中的异常…

    如果您的数组应该至少有两个项,我将执行断言:

    assert len(array) > 1, "Array should have at least 2 items"
    
    如果您的数组可以有2项,我将使用第一种形式:

    if len(array) > 1:
        # Process for array[1]
    

    从长远来看,try表单的可读性可能会降低,特别是当您需要在“数组的处理[1]”部分捕获异常时…

    python中这样的决策的一大特点是可读性。第一个选项对我来说更具可读性。这对于堆栈溢出来说是一个糟糕的问题,但是你有足够的代表加入我们,我们很高兴在这里讨论这个问题。我向
    codereview
    问了同样的问题,他们让我把这个问题移到
    stackoverflow
    ,现在
    stackoverflow
    让我去
    聊天室
    charroom
    rules说“不要将你最近(<1-2天)的问题链接到房间里。主站点是专门用来发布问题并让他们回答的空间。”,我应该在哪里问这个问题?非常类似于问题。python中这样的决策的一个重要特点是可读性。第一个选项对我来说更具可读性。这对于堆栈溢出来说是一个糟糕的问题,但是你有足够的代表加入我们,我们很高兴在这里讨论这个问题。我向
    codereview
    问了同样的问题,他们让我把这个问题移到
    stackoverflow
    ,现在
    stackoverflow
    让我去
    聊天室
    charroom
    规则规定“请勿将您最近(<1-2天)的问题链接到会议室中。主网站是发布问题并让他们回答的专用空间。”,我应该在哪里问这个问题?非常类似于问题。try中的处理意味着他在处理过程中不必捕获另一个索引器,或者他必须专门为此进行一次尝试,如果他不这样做,可能会导致奇怪的错误,因为捕获不是在正确的索引器上完成的。尤其是当“过程”变得越来越大的时候。使他写的方式“更好”,但如果他需要以这种方式请求更多的原谅,那么就显得很沉重……使用
    try/catch/else
    block有什么退步吗?@Cabu你的建议是使用
    if
    条件而不是
    索引器
    ?没有在正确的索引器上执行
    catch的含义是什么?
    在技术上没有缺点,但是使用
    try/catch/else
    而不是简单的
    try/catch
    是对这些语句的不当使用,这会导致可读性和可维护性较差的代码。@lafada我的意思是,如果在“过程”中“另一个数组[超出范围索引]“except will catch可能是一个错误,不应该捕捉它。尝试中的处理意味着他在处理过程中不必捕捉另一个索引器,或者他必须专门为此进行尝试,如果他不这样做,可能会导致奇怪的错误,因为捕捉不是在正确的索引器上进行的。尤其是当“过程”变得越来越大的时候。使他写的方式“更好”,但如果他需要以这种方式请求更多的原谅,那么就显得很沉重……使用
    try/catch/else
    block有什么退步吗?@Cabu你的建议是使用
    if
    条件而不是
    索引器
    ?没有在正确的索引器上执行
    catch的含义是什么?
    在技术上没有缺点,但是使用
    try/catch/else
    而不是简单的
    try/catch
    是对这些语句的不当使用,这会导致可读性和可维护性较差的代码。@lafada我的意思是,如果在“过程”中“另一个\u数组[超出\u范围\u索引]”except将捕获它可能是一个错误,不应捕获它。