Оператор 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
когда процесс показал сбой.