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.

classification
Title: pathlib's Path("NUL:").resolve() throws an error on windows
Type: behavior Stage:
Components: Windows Versions: Python 3.10, Python 3.9, Python 3.8
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: eryksun, paul.moore, phillmac, steve.dower, tim.golden, zach.ware
Priority: normal Keywords:

Created on 2020-08-13 02:29 by phillmac, last changed 2022-04-11 14:59 by admin.

Messages (2)
msg375289 - (view) Author: Phillip Mackintosh (phillmac) Date: 2020-08-13 02:29
I'm looking for the equivalent windows functionality to the posix `/dev/null` file, and I discovered `NUL:`

This snippet works on a windows OS, proving that it is indeed a writable file: `Path('NUL:').write_text('abcd')`

However, `Path('NUL:').resolve()` Throws an exception `OSError: [WinError 87] The parameter is incorrect: 'NUL:'`

Is this the expected behaviour? I.E. I should wrap the call to `resolve()` in a `try...except`?

If I catch all `OSError` types, how can I determine if it's a legitimate error or not?

E.G. Full console output:

    Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from pathlib import Path
    >>> Path('NUL:')
    WindowsPath('NUL:')
    >>> Path('NUL:').write_text('abcd')
    4
    >>> Path('NUL:').resolve()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\Program Files\Python37\lib\pathlib.py", line 1134, in resolve
        s = self._flavour.resolve(self, strict=strict)
      File "C:\Program Files\Python37\lib\pathlib.py", line 192, in resolve
        s = self._ext_to_normal(_getfinalpathname(s))
    OSError: [WinError 87] The parameter is incorrect: 'NUL:'
msg375342 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2020-08-13 20:24
The trailing colon is unnecessary, and likely to cause more issues, but the same thing occurs for Path('NUL').resolve()

This is probably best handled as issue37517, where you'll find more background on the error messages.

But I believe that p.resolve(strict=True) should not raise when open(p) will succeed, and p.resolve(strict=False) should not raise when open(p)  will succeed or raise a *NotFoundError subclass of OSError.
History
Date User Action Args
2022-04-11 14:59:34adminsetgithub: 85708
2020-08-13 20:24:51steve.dowersetmessages: + msg375342
versions: + Python 3.8, Python 3.9, Python 3.10, - Python 3.7
2020-08-13 06:28:43xtreaksetnosy: + eryksun
2020-08-13 02:29:57phillmaccreate