Preciso saber no meu script se um determinado commit é um commit padrão ou uma entrada stash. O método deve funcionar também para stashes descartados que ainda não foram coletados como lixo, portanto, não pode depender da verificação de sha de entradas de stash existentes (como git rev-parse stash@{X}
).
Piotr Siupa's questions
Estou tentando capturar a mensagem de erro de um programa chamado por subprocess.check_call
mas stderr
o objeto de erro é sempre None
.
Aqui está um pequeno script que mostra isso:
import subprocess
import sys
if '--fail' in sys.argv: # the script calls itself with this option, for the test
print('this is the error message', file=sys.stderr)
sys.exit(1)
try:
subprocess.check_call([sys.executable, sys.argv[0], '--fail'],
stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
print('Not failed?') # this neither happens nor is expected
except subprocess.CalledProcessError as err:
if err.stderr:
print(err.stderr.decode()) # this is what I expect
else:
print('<No error message>') # this is what happens
Eu tenho Python 3.10.12.
O novo <=>
operador torna a escrita de código mais conveniente e pode economizar algum desempenho se o algoritmo de comparação não for trivial, porque não precisa ser repetido duas vezes para obter a ordem completa.
Ou pelo menos pensei assim quando soube disso. Porém, quando tento usar na prática, em um switch
depoimento, não funciona.
Este código não compila:
#include <iostream>
void compare_values(int x, int y)
{
switch (x <=> y)
{
case std::strong_ordering::less:
std::cout << "is less\n";
break;
case std::strong_ordering::greater:
std::cout << "is greater\n";
break;
case std::strong_ordering::equal:
std::cout << "is equal\n";
break;
}
}
O compilador mostra um erro sugerindo que o valor retornado por <=>
não pode ser usado em a switch
:
<source>: In function 'void compare_values(int, int)':
<source>:5:15: error: switch quantity not an integer
5 | switch (x <=> y)
| ~~^~~~~
Compiler returned: 1
( exemplo ao vivo )
Eu acho que usar o operador de nave espacial no switch é um caso de uso bastante básico, óbvio e comum, então provavelmente existe algum truque para fazê-lo funcionar. Eu não consigo entender, no entanto.
Como posso corrigir esse código?