Существует ли путь в Python для превращения попытки/кроме в одну строку?
что-то как...
b = 'some variable'
a = c | b #try statement goes here
Где b
заявленная переменная и c
не... так c
бросил бы ошибку и a
стал бы b
...
Невозможно сжать блок try
/ , кроме
, в одна строка в Python.
Также плохо не знать, существует ли переменная в Python, как и в некоторых других динамических языках. Более безопасный способ (и преобладающий стиль) - установить все переменные на что-то. Если они не могут быть настроены, сначала установите их на Нет
(или 0
или ''
или что-то еще, если это более применимо).
Если вы сделайте сначала назначьте все интересующие вас имена, у вас есть варианты.
Лучшим вариантом является оператор if.
c = None
b = [1, 2]
если c равно None:
a = b
else: {{ 1}} a = c
Однострочный параметр - это условное выражение.
c = Нет
b = [1, 2]
a = c, если c не является другим b
Некоторые люди злоупотребляют коротким замыканием или
для этого. Это подвержено ошибкам, , поэтому я никогда не использую его.
c = Нет
b = [1, 2]
a = c или b
Рассмотрим следующий случай:
c = [] {{ 1}} b = [1, 2]
a = c или b
В этом случае a
, вероятно, должно быть []
, но это [1, 2]
, потому что []
ложно в логическом контексте. Поскольку существует множество значений, которые могут быть ложными, я не использую трюки или
. (Это та же проблема, с которой сталкиваются люди, когда говорят if foo:
, имея в виду , если foo не None:
.)
Вы можете это сделать путем доступа к пространству имен dict с помощью vars ()
, locals ()
или globals ()
, в зависимости от того, что наиболее подходит для вашей ситуации.
>>> b = 'some variable'
>>> a = vars().get('c', b)
Вы упомянули, что используете django. Если это имеет смысл для того, что вы делаете, вы можете захотеть использовать:
my_instance, created = MyModel.objects.get_or_create()
created
будет True или False. Может это тебе поможет.