Оператор Python "не возвращать" в коде возврата подпроцесса

Я только что натолкнулся на очень странную строку кода на Python:

....
self.myReturnCode = externalProcessPopen.returncode
....
....
return not self.myReturnCode
....

Что именно return not обозначает? Мне известно, что кодом возврата процесса Popen является None, пока он еще выполняется, и случайное число после его успешного завершения и завершения. Но что именно автор кода пытается достичь здесь?

Также стоит отметить, что тот же автор позже проверяет код возврата следующим образом:

if not testClass.testFunction():
    logger.error('Failed to execute Function')
    ....

4 ответа

Решение

not является логическим оператором, который возвращает логическое обратное значение. return возвращает результат этого оператора. Другими словами, выражение следует читать как return (not self.myReturnCode), Цитирование документации:

Оператор not доходность True если его аргумент неверен, False иначе.

Если self.myReturnCode это истинное значение, not self.myReturnCode является False, и наоборот. Обратите внимание, что self.myReturnCode может быть любым значением Python, но not всегда возвращает логическое значение, либо True или же False,

Если externalProcessPopen.returncode это код возврата внешнего процесса, тогда это будет положительное целое число, если процесс завершился с ошибкой, 0 если он успешно завершился. Это называется статусом завершения процесса; то, что ненулевые значения возвращаются, полностью зависит от процесса. not 0 затем True, not 1 (или более высокое целочисленное значение) дает вам False,

Если это None, затем True (not None является True) будет также возвращен, но subprocess.Popen() код возврата только None если процесс еще не завершен.

return not self.myReturnCode

должен интерпретироваться как:

return (not self.myReturnCode)

То, что он делает в вашем коде, просто так:

  • Если код возврата 0 затем вернитесь True
  • Если код возврата не 0 затем вернитесь False,
return not self.myReturnCode

эквивалентно:

return False if self.myReturnCode else True

Это не случайное число, это код возврата внешнего процесса, где ноль указывает на успех, а ненулевое число указывает на сбой.

Отсюда возвращаюсь not self.myReturnCode означает, что это возвращает True когда процесс был успешным и False когда процесс показал сбой.

Другие вопросы по тегам