gpt4 book ai didi

python - 为什么 getpwuid 和 getgrgid 有不同的行为?

转载 作者:太空狗 更新时间:2023-10-29 21:59:28 26 4
gpt4 key购买 nike

在 Python 2.7、3.4 和 3.5 中,grp.getgrgid 能够接受一个字符串:

from grp import getgrgid
print(getgrgid('0'))

但是,pwd.getpwuid 不能做同样的事情:

from pwd import getpwuid
print(getpwuid('0'))

Traceback (most recent call last):
File "getpwuid_test.py", line 2, in <module>
print(getpwuid('0'))
TypeError: an integer is required

这是因为在 Modules/pwdmodule.c 中,getpwuid 使用 PyNumber_ParseTuple 和一个使用 PyNumber_Index 的转换器获取 Python 整数,并在失败时引发异常。

但是,在 Modules/grpmodule.c 中,grp_getgrgid 使用 PyNumber_Long(或 PyNumber_Int Python) 首先作为转换,正如文档在 https://docs.python.org/3/c-api/number.html 中所说的那样,这相当于运行 int(o),它可以将字符串转换为整数。只有这样,它才会通过辅助函数 _Py_Gid_Converter

提供给 PyNumber_Index

造成这种差异的原因是什么?这是基于某些历史的刻意选择吗?

getgrgid 的行为似乎更有帮助,奇怪的是它不适用于这两个函数。这是 getgrgidgetpwuid 中的不良行为吗?

最佳答案

简短的回答是因为人类容易犯错,错误时有发生。有些是dooziesget noticed quickly , 其他人是次要的,可以多年未被发现。

感谢您帮助改进 Python!

关于python - 为什么 getpwuid 和 getgrgid 有不同的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34818623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com