gpt4 book ai didi

python - 如何找出哪个索引超出范围?

转载 作者:太空狗 更新时间:2023-10-29 20:41:26 25 4
gpt4 key购买 nike

如果出现 IndexError,有没有办法判断一行中的哪个对象“超出范围”?

考虑这段代码:

a = [1,2,3]
b = [1,2,3]

x, y = get_values_from_somewhere()

try:
a[x] = b[y]
except IndexError as e:
....

如果 xy 太大而 IndexError 被捕获,我想知道 a b 超出范围(因此我可以在 except block 中执行不同的操作)。

很明显,我可以将 xy 分别与 len(a)len(b) 进行比较,但我很好奇是否还有另一种使用 IndexError 的方法。

最佳答案

有一种方法,但我认为它不是很可靠。错误消息有细微差别:

a = [1,2,3]
b = [1,2,3]

a[2] = b[3]

---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-69-8e0d280b609d> in <module>()
2 b = [1,2,3]
3
----> 4 a[2] = b[3]

IndexError: list index out of range

但如果错误在左侧:

a[3] = b[2]

---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-68-9d66e07bc70d> in <module>()
2 b = [1,2,3]
3
----> 4 a[3] = b[2]

IndexError: list assignment index out of range

注意消息中的“分配”。

所以,你可以这样做:

a = [1,2,3]
b = [1,2,3]

try:
a[3] = b[2]
except IndexError as e:
message = e.args[0]
if 'assignment' in message:
print("Error on left hand side")
else:
print("Error on right hand side")

输出:

# Error on left hand side

同样,我不会太相信它,如果消息在另一个 Python 版本中发生变化,它就会失败。


我看过these parts of the source code , 这些不同的消息实际上是两个错误之间的唯一区别。

关于python - 如何找出哪个索引超出范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com