Sim*_*ser 7 python cpython python-2.7 python-3.x
在Python 2.7,3.4和3.5中,grp.getgrgid能够接受一个字符串:
from grp import getgrgid
print(getgrgid('0'))
Run Code Online (Sandbox Code Playgroud)
但是,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
Run Code Online (Sandbox Code Playgroud)
这是因为在内部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),可以将字符串转换为整数.只有这样才能PyNumber_Index通过辅助函数给予它_Py_Gid_Converter
造成这种差异的原因是什么?这是基于历史的故意选择吗?
这种行为getgrgid似乎更有帮助,奇怪的是它并不适用于这两种功能.在这种不良行为getgrgid或getpwuid?
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |