2015-10-23 1 views
0

Я пытаюсь контролировать свои журналы с помощью коротких рук if-else, потому что он выглядит элегантно в однострочном пространстве, но я замечаю, что мне нужно реализовать поток else как Что ж.Управление журналом с помощью short-hand if-then-else в python

Class MyClass(object): 
    def __init__(self, parent): 
     self.log_enabled = False  # To enable/disable logs 
     ... 

    def test(self): 
     ... 
     print "Command is being executed..." if self.log_enabled == True else pass 
     ... 

Если я ставлю pass на else, то это ошибка. Любой способ, чтобы выполнить это, либо используя if-else, либо другие методы?

+2

Это не то, как работает условное выражение. Также вам следует рассмотреть возможность использования встроенных средств ведения журнала. –

+0

просто сделай 'else ''', чтобы ничего не печатать –

+0

@RNar: Ничто, кроме пустой строки, которая не то, что вы хотите. – user2357112

ответ

2

Вы говорите, что печатать. pass - это не то, что вы можете распечатать. Однако вы можете напечатать пустую строку.

print "Command is being executed..." if self.log_enabled else '', 

Однако, похоже, что вы просто пытаетесь впихнуть троичный оператор в код, где такая стратегия оставляет свой код заметно хуже. Просто используйте традиционную структуру:

if self.log_enabled: 
    print "Command is being executed..." 
+0

Опция 'else ''' по-прежнему печатает новую строку. – user2357112

+1

Добавлена ​​запятая, теперь она просто печатает пробел. Это лучшее, что я могу сделать без 'sys.stdout' или' from __future__ import print_function', и правильное решение состоит в том, чтобы полностью тронуть тернарный оператор. – TigerhawkT3

1
def log_it(self, message, *args): 
    if self.log_enabled: 
     print message % args 

def test(self): 
    log_it("Command is being executed...") 
    log_it("A number less than 3 and greater than 1 is %d", 2) 

Но если это нетривиальный проект, вы должны просто использовать обычные классы питона протоколирования.

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