Pycharm警告&#34;未使用局部变量<variable>值&#34; in&#34; if&#34;虽然它实际使用了阻止

时间:2016-10-18 08:08:08

标签: python pycharm

Pycharm 2016.2警告我&#34;本地变量&#39;消息&#39;价值未被使用&#34;在if区块。

为什么会这样?

def build_message(result, action, data, time_stamp, error_message=None, path=None, line=None):
    """
    Result message format:
    Success message format: {'result', 'action', 'target', 'data:{...}', 'timestamp'}
    Failure message format: {'result', 'action', 'error_message', 'path', 'linenumber', 'timestamp', 'data:{}'}
    """
    if result == 'success':
        #  *** I'm getting warning on this one  
        message = {'result': result, 'action': action, 'target': path.strip('\''),
                   'timestamp': datetime.datetime.strptime(time_stamp, '%Y/%m/%d %H-%M-%S.%f'), 'data': data}
    else:
        message = {'result': result, 'action': action, 'error_message': error_message,
                   'target': path, 'linenum': line,
                   'timestamp': datetime.datetime.strptime(time_stamp, '%Y/%m/%d %H-%M-%S.%f'), 'data': data}
        try:
            return True, json.dumps(message)
        except (ValueError, TypeError) as json_error:
            return False, json_error.message

由于

1 个答案:

答案 0 :(得分:4)

您的try子句位于else分支下,因此永远不会使用message分支下的if变量。

你想要实现的目标可能是

if result == 'success':
    #  *** I'm getting warning on this one  
    message = {'result': result, 'action': action, 'target': path.strip('\''),
               'timestamp': datetime.datetime.strptime(time_stamp, '%Y/%m/%d %H-%M-%S.%f'), 'data': data}
else:
    message = {'result': result, 'action': action, 'error_message': error_message,
               'target': path, 'linenum': line,
               'timestamp': datetime.datetime.strptime(time_stamp, '%Y/%m/%d %H-%M-%S.%f'), 'data': data}
try:
    return True, json.dumps(message)
except (ValueError, TypeError) as json_error:
    return False, json_error.message

但是你需要在message之前初始化if-else变量,否则在分配之前会出现使用变量的错误

message = ""
if ...
    ...
else
    ...