Получение значения по умолчанию на индексе из диапазона в Python [дубликат]

71
задан dreftymac 19 August 2016 в 21:29
поделиться

6 ответов

В духе Python «просить прощения, а не разрешения», вот один способ:

try:
    b = a[4]
except IndexError:
    b = 'sss'
87
ответ дан 24 November 2019 в 12:51
поделиться

Использование try / catch?

try:
    b=a[4]
except IndexError:
    b='sss'
0
ответ дан 24 November 2019 в 12:51
поделиться

Я полностью прошу разрешения (т.е. мне не нравится попробуйте кроме метода ). Однако код становится намного чище, когда он инкапсулируется в метод:

def get_at(array, index, default):
    if index < 0: index += len(array)
    if index < 0: raise IndexError('list index out of range')
    return array[index] if index < len(a) else default

b = get_at(a, 4, 'sss')
1
ответ дан 24 November 2019 в 12:51
поделиться

Вы также можете определить небольшую вспомогательную функцию для этих случаев:

def default(x, e, y):
    try:
        return x()
    except e:
        return y

Она возвращает возвращаемое значение функции x , если только она не вызвала исключение типа e ; в этом случае он возвращает значение y . Использование:

b = default(lambda: a[4], IndexError, 'sss')

Правка : Сделано перехватить только один указанный тип исключения.

Мы по-прежнему приветствуем предложения по улучшению!

5
ответ дан 24 November 2019 в 12:51
поделиться

В духе не-Python «просить разрешения, а не прощения», вот другой способ:

b = a[4] if len(a) > 4 else 'sss'
59
ответ дан 24 November 2019 в 12:51
поделиться
try:
    b = a[4]
except IndexError:
    b = 'sss'

Более чистый способ (работает только при использовании dict):

b = a.get(4,"sss") # exact same thing as above

Вот другой способ, который может вам понравиться (опять же, только для dicts):

b = a.setdefault(4,"sss") # if a[4] exists, returns that, otherwise sets a[4] to "sss" and returns "sss"
3
ответ дан 24 November 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: