I had this:
msg = time + b' - ' + Logger.LEVELS_WORD[msg_loglevel] + b': ' + msg.encode('utf-8') + b'\n'
Since sometimes msg was already bytes, I wanted to concat msg.encode('utf-8') if it was string or else just msg, so I did this:
msg = time + b' - ' + Logger.LEVELS_WORD[msg_loglevel] + b': ' + msg if isinstance(msg, bytes) else msg.encode('utf-8') + b'\n'
But it is not working as I expected, since now msg equals msg
. (time + log level isn't getting added).
Should I do if/else instead?
A conditional expression has a very low precedence; it is executed last only before a
lambda
. As such the expression, as written, choses between eithertime + b' - ' + Logger.LEVELS_WORD[msg_loglevel] + b': ' + msg
ormsg.encode('utf-8')) + b'\n'
.Put the conditional expression with the
if
andelse
branches in parentheses:Consider using duck-typing (test for
hasattr(msg, 'encode')
), and breaking up the expression into multiple lines for readability. If you are using Python 3.5 or newer, perhaps you want to useprintf
-style formatting: