Python: попробуйте оператор в одной строке

Существует ли путь в Python для превращения попытки/кроме в одну строку?

что-то как...

b = 'some variable'
a = c | b #try statement goes here

Где b заявленная переменная и c не... так c бросил бы ошибку и a стал бы b...

67
задан dreftymac 15 November 2019 в 15:45
поделиться

3 ответа

Невозможно сжать блок 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: .)

50
ответ дан 24 November 2019 в 14:31
поделиться

Вы можете это сделать путем доступа к пространству имен dict с помощью vars () , locals () или globals () , в зависимости от того, что наиболее подходит для вашей ситуации.

>>> b = 'some variable'
>>> a = vars().get('c', b)
4
ответ дан 24 November 2019 в 14:31
поделиться

Вы упомянули, что используете django. Если это имеет смысл для того, что вы делаете, вы можете захотеть использовать:

my_instance, created = MyModel.objects.get_or_create()

created будет True или False. Может это тебе поможет.

2
ответ дан 24 November 2019 в 14:31
поделиться
Другие вопросы по тегам:

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