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 编码样式假定存在有效的键或属性,并且 如果假设被证明是错误的,则捕获异常。这件衣服又干净又快 风格的特点是有许多不同的风格 声明。这项技术与许多人所共有的风格形成了鲜明对比 其他语言,如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将捕获它可能是一个错误,不应捕获它。