You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pathlib's Path("NUL:").resolve() throws an error on windows #85708
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:'
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 bpo-37517, 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.
Activity
phillmac commentedon Aug 13, 2020
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 exceptionOSError: [WinError 87] The parameter is incorrect: 'NUL:'Is this the expected behaviour? I.E. I should wrap the call to
resolve()in atry...except?If I catch all
OSErrortypes, 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:'zooba commentedon Aug 13, 2020
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 bpo-37517, 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.
barneygale commentedon Aug 10, 2024
This was fixed in 3.10 by GH-25264.