#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
, доступна в области действия функции, верно?