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
块。