Message210824
| Author |
vstinner |
| Recipients |
Arfrever, georg.brandl, larry, python-dev, richard, serhiy.storchaka, vajrasky, vstinner |
| Date |
2014年02月10日.11:10:26 |
| SpamBayes Score |
-1.0 |
| Marked as misclassified |
Yes |
| Message-id |
<1392030626.5.0.774242247652.issue20517@psf.upfronthosting.co.za> |
| In-reply-to |
| Content |
"And you should avoid passing raw bytes string to build an error message, you probably has the Python object version of the filename somewhere in your code."
Oh, I remember the reason why char* must not be used to build an OSError: on Windows, you should never try to decode a bytes filename, because it may raise a UnicodeDecodeError while you are trying to build an OSError. See issue #15478 for the rationale.
Just pass the original PyObject* you get in path_t. There is even an unit test to ensure that OSError.filename is the original name: OSErrorTests.test_oserror_filename() in test_os. |
|