A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2016-April/143907.html below:

[Python-Dev] Pathlib enhancements - acceptable inputs and outputs for __fspath__ and os.fspath()

[Python-Dev] Pathlib enhancements - acceptable inputs and outputs for __fspath__ and os.fspath()Ethan Furman ethan at stoneleaf.us
Mon Apr 11 12:18:01 EDT 2016
On 04/10/2016 11:27 PM, Nick Coghlan wrote:
> On 11 April 2016 at 02:16, Ethan Furman <ethan at stoneleaf.us> wrote:

>>> DirEntry can still get the check, it can just throw TypeError when it
>>> represents a binary path (that's one of the advantages of using a
>>> method-based protocol - exceptions on method calls are more acceptable
>>> than exceptions on property access).
>>
>>
>> I guess I don't see the point of this.  Either DirEntry's [1] only get
>> partial support (which is only marginally better than the no support pathlib
>> currently has), or stdlib code will need to catch those errors and then do
>> an isinstance check to see if knows what the type is and how to deal with it
>> [1].
>
> What's wrong with only gaining partial support? Standard library code
> that doesn't currently support DirEntry at all will gain the ability
> to support str-based DirEntry objects, while bytes-based DirEntry
> objects will continue to be a low level object [...]

Let's consider to functions, one that accepts bytes/str for the path, 
and one that only accepts str:


   str-only support
   ----------------
   # before new protocol
   def do_fritz(a_path):
       if not isinstance(a_path, str):
           raise TypeError('str required')
       ...

   # after new protocol with str-only support
   def do_fritz(a_path):
       a_path = fspath(a_path)
       ...

   # after new protocol with bytes/str support
       a_path = fspath(a_path)
       if not isinstance(a_path, str):
           raise TypeError('str required')
       ...


   bytes/str support
   -----------------
   # before new protocol
   def zingar(a_path):
       if not isinstance(a_path, (bytes,str)):
           raise TypeError('bytes or str required')
       ...

   # after new protocol with str-only support
   def zingar(a_path):
       if not isinstance(a_path, bytes):
           try:
               a_path = fspath(a_path)
           except FSPathError:
               raise TypeError('bytes or str required')
       ...

   # after new protocol with bytes/str support
   def zingar(a_path):
       a_path = fspath(a_path)
       if not isinstance(a_path, (bytes,str)):
           raise TypeError('bytes or str required')
       ...


If those examples are anywhere close to accurate, an fspath protocol 
that supported both bytes and str seems a lot easier to work with.

--
~Ethan~
More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4