从Ruby到Python-是否有等效的“ try”?

Igo*_*isk 6 python dictionary list

在Ruby中(实际上是在Rails上),我具有以下try功能:

[].try(:[], 1) # => nil
[10].try(:[], 1) # => nil
[10, 20].try(:[], 1) # => 20
[10, 20, 30].try(:[], 1) # => 20

{}.try(:foo) # => nil
{ foo: 'bar' }.try(:foo) # => 'bar'
Run Code Online (Sandbox Code Playgroud)

该函数基本上是避免if检查位置是否存在的快捷方式。
Python中有类似的东西吗?

cs9*_*s95 5

字典: dict.get

您可以使用dict.get

d = {'foo' : 'bar'}

print(d.get('foo'))
'bar'

print(d.get('xxxxx'))
None
Run Code Online (Sandbox Code Playgroud)

您还可以将默认参数传递给get

print(d.get('xxxxx', 'Invalid Key!'))
Invalid Key!
Run Code Online (Sandbox Code Playgroud)

当键在字典中不存在时打印出默认值。


列表:自定义try-except

不幸的是,列表dict.get在其 API 中没有等效项,因此您需要自己实现一个。值得庆幸的是,您可以扩展list类并覆盖__getitem__以干净利落地做到这一点。

class MyList(list):
    def __getitem__(self, idx, default='oops'):
        try:
            return super().__getitem__(idx)
        except IndexError:
            return default

l = MyList([10, 20])

l[1]
# 20

l[3]
# 'oops'

      
Run Code Online (Sandbox Code Playgroud)