Stefan Behnel added the comment: > I currently do isinstance(x, types.GeneratorType), which will fail if x > is actually a GeneratorWrapper. I can change this to use > collections.abc.Generator when it exists, but then I'd have to have some > conditional logic to switch between collections.abc and types depending > on what version I'm running on.
I originally planned to make the next Cython release patch the Generator and Coroutine ABCs into collections.abc, but I now think it would be worth uploading an "abc_backports" package to PyPI instead that does that and on which asyncio, tornado and other packages could simply depend with a try-import. > It would be nice if that were > encapsulated in inspect.isgenerator(). +1, code that needs exactly a generator, e.g. for "gi_running" and friends, can still test for isinstance(obj, types.GeneratorType) in a completely backwards compatible way, which is more explicit anyway. > More generally, the inconsistency between isgenerator() and > iscoroutine() is kind of odd. I would expect that either all inspect > functions or none of them would use a suitable ABC if one exists. Yes, it's odd. Either way would work ("types is for types only" vs. "types includes protocols"), but having both disagree seems wrong. I think the mere fact that there is a higher level function than isinstance() suggests that it should really be more high level and not just doing exactly the same for all times. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue24400> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com