This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2009年08月11日 21:15 by alexandre.vassalotti, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| move_int_special_case.diff | alexandre.vassalotti, 2009年08月11日 21:15 | |||
| Messages (7) | |||
|---|---|---|---|
| msg91483 - (view) | Author: Alexandre Vassalotti (alexandre.vassalotti) * (Python committer) | Date: 2009年08月11日 21:15 | |
The documentation for PyBytes_FromObject states: .. cfunction:: PyObject* PyBytes_FromObject(PyObject *o) Return the bytes representation of object *o* that implements the buffer protocol. However, there exists a special-case for integer object in PyBytes_FromObject that makes the function return a null-initialized bytes object. Currently, this is only used for handling `bytes(10)'. I don't like changing APIs after a stable release, but I believe this behaviour is error-prone and surprising (and darn right annoying even). So, I believe the special-case should be made specific to the bytes constructor. Thus, here is the fine patch. |
|||
| msg91484 - (view) | Author: Alexandre Vassalotti (alexandre.vassalotti) * (Python committer) | Date: 2009年08月11日 21:18 | |
Oh, in case you wonder, the added PyUnicode_Check(x) check is to force PyBytes_FromObject to raise an error when given an empty unicode string (I will this as a comment in my patch). |
|||
| msg91485 - (view) | Author: Benjamin Peterson (benjamin.peterson) * (Python committer) | Date: 2009年08月11日 21:25 | |
+1 |
|||
| msg91556 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2009年08月14日 16:12 | |
+1 from me too; I agree the current API of PyBytes_FromObject is ugly.
Is there still a need for a separate C function for creating a zero-
initialized bytes object from a Py_ssize_t or a Python integer? It's a
fairly simple operation (PyBytes_FromStringAndSize + memset), so perhaps
it doesn't need its own public function.
I'm not sure about the extra PyUnicode_Check: this seems to go against
Python's philosophy of duck-typing. After all, the empty string *is* an
iterable all of whose elements are integers. And this check doesn't cover
other, similar, cases: for example, list('') will still be converted by
PyBytes_FromObject, while list('123') won't. What's the benefit?
If this check is going to stay, there should probably also be a unit test
for this behaviour.
Apart from the reservation about the PyUnicode_Check, the patch looks good
to me. All tests pass on my machine (OS X 10.5) with this patch applied.
|
|||
| msg96255 - (view) | Author: Alexandre Vassalotti (alexandre.vassalotti) * (Python committer) | Date: 2009年12月11日 13:54 | |
Mark Dickinson wrote:
> Is there still a need for a separate C function for creating a zero-
> initialized bytes object from a Py_ssize_t or a Python integer?
What C function are you referring to?
> And this check doesn't cover other, similar, cases: for example, list('')
> will still be converted by PyBytes_FromObject, while list('123') won't.
Well, one is a just empty list and the other a list of strings. I don't see
why converting a empty list to bytes should raise an error. Although I agree
the type check is a bit out of place, I think it will help prevents bugs.
In addition, PyBytes_FromObject() is documented as equivalent to the
built-in
bytes(). Since calling bytes() with any unicode string raises a TypeError
exception, unless an encoding is specified, I believe PyBytes_FromObject()
should also follow this convention.
|
|||
| msg96264 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2009年12月11日 16:46 | |
> What C function are you referring to? A currently non-existent one! I was wondering whether the current bytes- from-integer functionality that PyBytes_FromObject supplies is important enough to preserve somehow. I'd guess not. |
|||
| msg97077 - (view) | Author: Alexandre Vassalotti (alexandre.vassalotti) * (Python committer) | Date: 2009年12月31日 03:57 | |
Committed in r77174. Thank you for reviewing! |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:51 | admin | set | github: 50936 |
| 2009年12月31日 03:57:04 | alexandre.vassalotti | set | status: open -> closed resolution: accepted messages: + msg97077 stage: patch review -> resolved |
| 2009年12月11日 16:46:02 | mark.dickinson | set | messages: + msg96264 |
| 2009年12月11日 13:54:20 | alexandre.vassalotti | set | messages: + msg96255 |
| 2009年11月14日 20:38:10 | alexandre.vassalotti | link | issue1023290 dependencies |
| 2009年08月14日 16:12:19 | mark.dickinson | set | nosy:
+ mark.dickinson messages: + msg91556 |
| 2009年08月11日 21:25:19 | benjamin.peterson | set | nosy:
+ benjamin.peterson messages: + msg91485 |
| 2009年08月11日 21:18:12 | alexandre.vassalotti | set | messages: + msg91484 |
| 2009年08月11日 21:15:31 | alexandre.vassalotti | create | |