Eryk Sun <eryk...@gmail.com> added the comment:
> Ouch, is Python crashes because of an unsupported strftime call? It's not a crash. It's a CRT error report dialog, which is enabled by default for the _CRT_ASSERT and _CRT_ERROR macros in debug builds. This dialog can be helpful when debugging interactively. It gives a developer the option to abort, retry, or ignore. If a debugger is attached, the retry option breaks into the debugger. I attached a debugger to the test runner to diagnose the problem with format code "%4Y". For example: >>> time.strftime('%4Y') Debug Assertion Failed! [...] (Press Retry to debug the application) (1a6c.101c): Break instruction exception - code 80000003 (first chance) ucrtbased!_Wcsftime_l+0x5af: 00007ff8`a582b9af cc int 3 backtrace: 0:000> kc 4 Call Site ucrtbased!_Wcsftime_l ucrtbased!_Strftime_l ucrtbased!strftime python311_d!time_strftime locals: 0:000> dv _Expr_val = 0n0 string = 0x00000226`fe38d1c0 "" max_size = 0x400 format = 0x00000226`fe37e7d0 "%4Y" timeptr = 0x00000041`c1feeda0 lc_time_arg = 0x00000000`00000000 locale = 0x00000000`00000000 locale_update = class _LocaleUpdate format_it = 0x00000226`fe37e7d2 "4Y" remaining = 0x400 lc_time = 0x00007ff8`a5868550 failed = true string_it = 0x00000226`fe38d1c0 "" resume, with the STATUS_BREAKPOINT (0x80000003) exception handled: 0:000> gh Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: Invalid format string >>> For non-interactive testing the report mode needs to be configured to 0 (no report) or to report to stderr. For example: >>> msvcrt.CrtSetReportMode(msvcrt.CRT_ERROR, msvcrt.CRTDBG_MODE_FILE) 4 >>> msvcrt.CrtSetReportFile(msvcrt.CRT_ERROR, msvcrt.CRTDBG_FILE_STDERR) 18446744073709551615 >>> os.abort() abort() has been called For time.strftime('%4Y'), the source of the report is _VALIDATE_RETURN(false, EINVAL, 0) in _Wcsftime_l(). This macro includes an _ASSERT_EXPR(expr, msg) check. In a debug build, this calls _CrtDbgReportW(_CRT_ASSERT, ...) if the expression is false. If the latter returns 1 (retry), the __debugbreak() intrinsic is called to break into the debugger. To suppress the dialog, either temporarily set the CRT_ASSERT report mode to 0, or set it to report to stderr. For example: >>> msvcrt.CrtSetReportMode(msvcrt.CRT_ASSERT, msvcrt.CRTDBG_MODE_FILE) 4 >>> msvcrt.CrtSetReportFile(msvcrt.CRT_ASSERT, msvcrt.CRTDBG_FILE_STDERR) 18446744073709551615 >>> time.strftime('%4Y') minkernel\crts\ucrt\src\appcrt\time\wcsftime.cpp(1163) : Assertion failed: false Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: Invalid format string ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue47037> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com