Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork33.7k
Closed
Description
Bug report
1. Misleading error message
>>> import struct>>> struct.pack(">Q", -1)Traceback (most recent call last): File "<stdin>", line 1, in <module>struct.error: int too large to convertI don't think-1 is that large to convert to ulonglong, so the error message is wrong. The problem is that-1 is not in the range of ulonglong. The current error message is not helpful for users to debug.
Compared to other error messages:
Code
import structfor endianness in "<>": for size in "BHILQ": try: fmt = endianness + size struct.pack(fmt, -1) except struct.error as e: print("Error msg of " + fmt + ":", e)stdout
Error msg of <B: ubyte format requires 0 <= number <= 255Error msg of <H: ushort format requires 0 <= number <= 65535Error msg of <I: argument out of rangeError msg of <L: argument out of rangeError msg of <Q: argument out of rangeError msg of >B: ubyte format requires 0 <= number <= 255Error msg of >H: argument out of rangeError msg of >I: argument out of rangeError msg of >L: argument out of rangeError msg of >Q: int too large to convert2. Inconsistent error messages when packing into different integral types
See the output above.
A possible solution
I can create a PR to fix the 1st problem. For the 2nd problem,#28178 (comment) and#89197 (comment) said that the inconsistency can be fixed, so I can probably fix this in the same PR.
Your environment
- CPython versions tested on: Python 3.12.0a0 (heads/main:ccab67b, Oct 12 2022, 15:25:20) [GCC 12.2.0] on linux
- Operating system and architecture: Arch Linux 5.19.13.arch1-1, x86-64
- Native endianness: Little-endian