2016-09-07 2 views
2

Я учусь Exception Handling в Python и наткнулся на следующий фрагмент кода: класс исключение:что делает «()» синтаксис означает в питона

from flask import jsonify 

class InvalidUsage(Exception): 
    status_code = 400 

    def __init__(self, message, status_code=None, payload=None): 
     Exception.__init__(self) 
     self.message = message 
     if status_code is not None: 
      self.status_code = status_code 
     self.payload = payload 

    def to_dict(self): 
     rv = dict(self.payload or()) 
     rv['message'] = self.message 
     return rv 

В этом коде, что делает эта строка на самом деле означает

rv = dict(self.payload or()) 

внутри to_dict способ? Для чего стоит ()?

ответ

5

() означает пустой кортеж. С другой стороны, or здесь действует как null coalescing operator в self.payload or(), где все выражение возвращает пустой кортеж, если self.payload оценивает значение false.

>>> False or 5 
5 
>>> [] or (1, 2, 3) 
(1, 2, 3) 
+0

здесь проверка, если она есть Нет, но все равно доходит до одной и той же вещи, так как None является False в булевой проверке – Mixone

3

из питона оболочки:

>>> type(()) 
<type 'tuple'> 

Так что это tuple.

1

В основном то, что происходит в том, что, как @turkus ответил:

из питона оболочки:

type(()) 
<type 'tuple'> 

Так что кортеж.

Что он делает, это проверка, если self.payload не является None. Если это None, то переменная rv равна dict, если не равна self.payload.

Смежные вопросы