Pycharm предупреждает «Значение локальной переменной не используется» в блоке «if», хотя оно фактически использовалось

#python #pycharm

#python #pycharm

Вопрос:

Pycharm 2016.2 предупреждает меня, что «значение локальной переменной «сообщение» не используется» в 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:

Ваше try предложение находится в разделе else branch, поэтому message переменная в разделе if branch никогда не используется.

То, чего вы хотели достичь, вероятно

 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
    ...
  

Комментарии:

1. Рад вам помочь 🙂

2. но python ограничен самой внутренней функцией, и если это if утверждение и try-catch находится внутри функции, оно не выдаст ошибку, не так ли? Потому что переменная, объявленная внутри if , доступна в области действия функции, верно?