В духе Python «просить прощения, а не разрешения», вот один способ:
try:
b = a[4]
except IndexError:
b = 'sss'
Использование try / catch?
try:
b=a[4]
except IndexError:
b='sss'
Я полностью прошу разрешения (т.е. мне не нравится попробуйте
… кроме метода
). Однако код становится намного чище, когда он инкапсулируется в метод:
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')
Вы также можете определить небольшую вспомогательную функцию для этих случаев:
def default(x, e, y):
try:
return x()
except e:
return y
Она возвращает возвращаемое значение функции x
, если только она не вызвала исключение типа e
; в этом случае он возвращает значение y
. Использование:
b = default(lambda: a[4], IndexError, 'sss')
Правка : Сделано перехватить только один указанный тип исключения.
Мы по-прежнему приветствуем предложения по улучшению!
В духе не-Python «просить разрешения, а не прощения», вот другой способ:
b = a[4] if len(a) > 4 else 'sss'
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"