在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)作为转换,并且文档在{{3这相当于运行int(o)
,它可以将字符串转换为整数。只有这样才能通过辅助函数PyNumber_Index
_Py_Gid_Converter
这种差异的原因是什么?这是基于某些历史的刻意选择吗?
getgrgid
的行为似乎更有帮助,奇怪的是它不适用于这两个函数。这是getgrgid
或getpwuid
中的不良行为吗?
答案 0 :(得分:0)
简短的回答是因为人类容易犯错并且会发生错误。有些是doozies和get noticed quickly,有些是未成年人,可能会在未经检测的情况下持续数年。
感谢您帮助改进Python!