2

例如,我想知道如何在尝试访问超出范围的列表或尝试从不存在的字典中获取键时返回类似 False 的值,而不是出现错误。有谁知道一种方法?

4

3 回答 3

1

字典有一个 get 方法可以让你做到这一点

test = {}
test.get("gold", False)

这会产生False或您给出的任何其他内容作为第二个参数。

于 2020-10-16T01:04:08.720 回答
1

当您尝试访问超出范围的列表时,您会在控制台日志的最后一行收到此消息:

IndexError:列表索引超出范围

所以,举个例子:

test_list = [0]*1

print(test_list[1])

IndexError: list index out of range

所以你需要:

test_list = [0]*1

try:
   print(test_list[1])
except IndexError:
   value = False
   print (value)

False
于 2020-10-16T01:08:55.280 回答
1

对于字典,您可以使用模块 IE中defaultdict的a:collections

from collections import defaultdict

my_dict = defaultdict(lambda: False)

my_dict['test']  # This will be False

defaultdict您可以在文档中阅读更多信息

然而,对于一个列表,它变得有点复杂,子类化list和覆盖将__getitem__调用包装在 try/except 子句中并返回不同值的方法:

class defaultlist(list):
    def __getitem__(self, key):
        try:
            return super().__getitem__(key)
        except IndexError:
            return False

my_list = defaultlist()
my_list[10]  # This will be False
于 2020-10-16T01:23:48.860 回答