【发布时间】:2016-04-22 13:54:58
【问题描述】:
我有这个:
msg = time + b' - ' + Logger.LEVELS_WORD[msg_loglevel] + b': ' + msg.encode('utf-8') + b'\n'
由于有时 msg 已经是字节,我想 concat msg.encode('utf-8') 如果它是字符串或者只是 msg,所以我这样做了:
msg = time + b' - ' + Logger.LEVELS_WORD[msg_loglevel] + b': ' + msg if isinstance(msg, bytes) else msg.encode('utf-8') + b'\n'
但它并没有像我预期的那样工作,因为现在msg equals msg。 (未添加时间 + 日志级别)。
我应该改用 if/else 吗?
【问题讨论】:
-
你期待什么,它做了什么?
-
@AmitGold concat msg.encode('utf-8') 或 msg 取决于它是否已经是字节。
-
而不是
msgs 之一,将其更改为类似_msg的内容,然后执行msg = _msg -
您在提供的答案中所述的问题是优先级,if 是在表达式之前取整。所以你需要在你的条件中使用括号 (msg if isinstance(msg, bytes) else msg.encode('utf-8'))
标签: python conditional-expressions