我需要在脚本中知道给定的提交是标准提交还是存储条目。该方法还适用于尚未被垃圾收集的已删除存储,因此它不能依赖于检查现有存储条目的 sha(如git rev-parse stash@{X}
)。
主页
/
user-3052438
Piotr Siupa's questions
Piotr Siupa
Asked:
2024-05-12 01:34:41 +0800 CST
我试图捕获由 调用的程序的错误消息subprocess.check_call
,但stderr
错误对象中的始终是None
.
这是一个简短的脚本,显示了这一点:
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
我有Python 3.10.12。
Piotr Siupa
Asked:
2024-02-11 22:04:32 +0800 CST
新的<=>
运算符使编写代码更加方便,并且如果比较算法不平凡,它可以节省一些性能,因为它不需要重复两次才能获得完整的排序。
或者至少当我了解到这一点时我是这么认为的。然而,当我尝试在实践中使用它时,在switch
声明中,它不起作用。
此代码无法编译:
#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;
}
}
编译器显示错误,提示返回的值<=>
不能在 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
(活生生的例子)
我猜想在 switch 中使用 spaceship 操作符是一个非常基本、明显和常见的用例,所以可能有一些技巧可以让它工作。但我无法弄清楚。
我该如何修复此代码?