Python 如何捕捉索引错误
给定Python 如何捕捉索引错误,python,Python,给定mylist=[0,1] def catch_index_error(value): try: return value except IndexError: return None catch_index_error(mylist[5]) 返回一个索引器 在执行函数之前对参数求值,因此函数无法捕获异常。有办法抓住它吗 try: catch_index_error(mylist[5]) except IndexError:
mylist=[0,1]
def catch_index_error(value):
try:
return value
except IndexError:
return None
catch_index_error(mylist[5])
返回一个索引器
在执行函数之前对参数求值,因此函数无法捕获异常。有办法抓住它吗
try:
catch_index_error(mylist[5])
except IndexError:
do something
错误发生在调用中使用以下命令:
try:
mylist[5]
except IndexError:
#your code
表达式
mylist[5]
导致索引器
,因为它是在调用函数之前计算的
解决此问题的唯一方法是让函数从mylist
返回正确的值:
这里提到的所有答案都能满足您的要求。但我相信实现这一点的理想方法是使用
装饰器。事实上,它们存在于python中,用于此类场景。例如,将装饰器创建为:
def wrap_index_error(func):
def wrapped_func(*args, **kwargs):
try:
func_response = func(*args, **kwargs)
except IndexError:
func_response = None
return func_response
return wrapped_func
现在,您可以在希望捕获索引器
异常的任何函数中使用此修饰符作为@wrap\u index\u error
。例如,在您的案例中:
@wrap_index_error
def get_item_from_list(my_list, index):
return my_list[index]
现在,您可以进行简单调用以访问值,如下所示:
>>> new_list = [1, 3, 5]
>>> print get_item_from_list(new_list, 2)
5
>>> print get_item_from_list(new_list, 8)
None
注意:我将list作为参数传递给函数,因为在函数中更新全局值不是一个好的做法。而是将其作为一个参数传递。这样,您的代码将更加模块化。例如,您是否希望在另一个列表上执行相同的操作
要了解更多关于装饰师的信息,请查看:谢谢。这是有效的,这正是我一直在寻找的。添加了一个使用decorator的答案。我相信你会有兴趣去看看
>>> new_list = [1, 3, 5]
>>> print get_item_from_list(new_list, 2)
5
>>> print get_item_from_list(new_list, 8)
None