2014-10-03 2 views
0

У меня есть этот список ошибок с их связанными кодами и описаниями:Возвращение кортежа со значением в списке

Exception = namedtuple("Exception", "code name description") 
exceptions = [ 
    Exception(1, "ILLEGAL FUNCTION", "Definition 1"), 
    Exception(2, "ILLEGAL DATA ADDRESS", "Definition 2"), 
    Exception(3, "ILLEGAL DATA VALUE", "Definition 2") 
] 

Я хотел бы функцию, которая извлекает исключение с кодом == exception_code. Я искал вокруг и ближе всего я мог придумать это:

# Returns the Exception tuple corresponding to the exception_code 
def getException(self): 
    return [item for item in exceptions if item[0] == self.exception_code] 

Это работает, но это на самом деле возвращает список. Мой опыт работы с Python довольно беден, и я не могу понять, как просто возвращать кортеж вместо

NB: Там всегда будет ровно один кортеж с кодом == exception_code

Пример вывода из print x.getException с мой текущий getException:

[Exception(code=2, name='ILLEGAL DATA ADDRESS', description='Definition 2')] 
+0

Почему бы не использовать словарь, а? – jonrsharpe

+0

Что? Каким будет это? Кроме того, если вам не нужен список, зачем использовать понимание списка? – jonrsharpe

ответ

3

в этом случае вам лучше делать исключения в Dict:

exceptions = { 
    1: Exception(1, "ILLEGAL FUNCTION", "Definition 1"), 
    2: Exception(2, "ILLEGAL DATA ADDRESS", "Definition 2"), 
    3: Exception(3, "ILLEGAL DATA VALUE", "Definition 2") 
} 

Здесь ваша getException функция становится тривиальной:

def getException(code): 
    return exceptions[code] 

... и вы должны задаться вопросом, выглядит ли вызов функции лучше, чем просто встраивание :-)

+0

Спасибо, это выглядит намного лучше, попробует и дам вам точку – Juicy

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