> >         raise TypeError(f"iterable cannot be a str")
>
> Why is that a f-string? It's a static message. That's kind of like
> writing `x += eval('1')`.
>

Well I had cut it down from another copy/pasted version with a variable in
it just for this conversation.

>     yield from iter(iterable)
>
> That would be better written as `return iter(iterable)`, and possibly
> more efficient too (I think).
>

Thanks.

> The nature of my coding work is a lot of parsing of different kinds of
> text
> > files and so I've had to write a lot of functions that are meant to take
> in
> > an iterable of strings. So the biggest context that comes to mind is to
> > guard against future me mistakenly sending a string into functions that
> are
> > intended to work with iterables of strings.
>
> Have you considered writing the functions to accept either a single
> string or an iterable of strings?
>

Well these are parsing FILES- not only iterables of strings but iterables
of LINES- but there are certainly times when that would be useful.

Assuming they all take a single iter-of-strings argument as first
> argument, you could do that with a simple decorator:
>
>     def decorate(func):
>         @functools.wraps(func)
>         def inner(iter_of_strings, *args, **kw):
>             if isinstance(iter_of_strings, str):
>                 iter_of_strings = (iter_of_strings,)
>             return func(iter_of_strings, *args, **kw)
>         return inner


The decorator idea is much more idiomatic python. Thanks for the suggestion.

However in these kinds of situations if I ever were accidentally sending in
a string, it is much more likely I meant to split it on lines and need to
do this:

if isinstance(iter_of_strings, str):
                iter_of_strings = iter_of_strings.split("\n")

But I've also found that if I try to predict what I meant to do, instead of
just reporting that I did something that doesn't seem to make sense, I'm
making a mistake... Better just to create the exception and remind myself
that it is not expecting a string...
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/VGSNXR2UGCE5PH3AL5ZVRJYPYO6VSDEW/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to