Python:在用户输入中捕获索引器

Python:在用户输入中捕获索引器,python,Python,在获取输入以捕获有关搜索列表的函数的索引错误时遇到问题。 下面是我的代码 while True: try: mark_visited = int(input("Enter the number of a place to mark as visited \n>>> ")) - 1 break except ValueError: print("Invalid input, en

在获取输入以捕获有关搜索列表的函数的索引错误时遇到问题。 下面是我的代码

    while True:
    try:
        mark_visited = int(input("Enter the number of a place to mark as visited \n>>> ")) - 1
        break
    except ValueError:
        print("Invalid input, enter a valid number")
    except IndexError:
        print("Invalid place number")
当输入索引之外的输入时,我得到以下错误:

Traceback (most recent call last):
File "*****", line 
146, in <module>
 main()
File "*****", line 
127, in main
 mark_visited(data)
File "*****", line 
81, in mark_visited
 if data[mark_visited][3] == "v":
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“******”,第行
146,在
main()
文件“******”,第行
总的来说是127
mark_访问(数据)
文件“******”,第行
81年,在马克·欧
如果数据[mark_visited][3]=“v”:
索引器:列表索引超出范围
我怎样才能让它捕捉到错误呢


提前感谢

在尝试获取值之前,您可以检查列表中是否有足够的项

否则,您可以在使用index和catch for Indexer的列表周围编写一个try/catch块。但是如果你能自己检查索引,我就不推荐这个解决方案


编辑:要获得更多帮助,我会发布脚本或出现错误的行。在您的情况下,它应该位于第81行,您试图在输入时捕捉索引错误,但是,您应该尝试捕捉实际发生的索引错误,例如,在您提供的错误描述中:

文件“******”,第行
81年,在马克·欧
如果数据[mark_visited][3]=“v”:
索引器:列表索引超出范围
因此,您应该在第81行中看到错误。 但是,如果您可以在实际尝试按索引访问值之前检查索引是否可接受,您可能应该这样做,例如:

为True时:
尝试:
mark_visted=int(输入(“输入要标记为已访问的位置的编号”)-1
打破
除值错误外:
打印(“无效输入,输入有效数字”)
如果mark_访问>len(数据)-1:
#处理索引超出范围的情况

异常不是来自您输入号码的那一行。它来自你索引列表的那一行。在为列表编制索引之前,请检查列表的长度,或者在实际引发错误的行周围放置一个
try/except
块。