Title: Inference failure in `return` statement with `next` and `or` · Issue #15755 · python/mypy · GitHub
Open Graph Title: Inference failure in `return` statement with `next` and `or` · Issue #15755 · python/mypy
X Title: Inference failure in `return` statement with `next` and `or` · Issue #15755 · python/mypy
Description: The following MWE (mypy-playground): from typing import Iterator def this_fails(numbers: Iterator[int]) -> int: return next(numbers, None) or 0 def intermediate_is_ok(numbers: Iterator[int]) -> int: my_number = next(numbers, None) or 0 r...
Open Graph Description: The following MWE (mypy-playground): from typing import Iterator def this_fails(numbers: Iterator[int]) -> int: return next(numbers, None) or 0 def intermediate_is_ok(numbers: Iterator[int]) -> int...
X Description: The following MWE (mypy-playground): from typing import Iterator def this_fails(numbers: Iterator[int]) -> int: return next(numbers, None) or 0 def intermediate_is_ok(numbers: Iterator[int]) -&g...
Opengraph URL: https://github.com/python/mypy/issues/15755
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Inference failure in `return` statement with `next` and `or`","articleBody":"The following MWE ([mypy-playground](https://mypy-play.net/?mypy=master\u0026python=3.11\u0026flags=strict\u0026gist=9dccc7c6071cb4568db291adc3558a48)):\r\n```python\r\nfrom typing import Iterator\r\n\r\ndef this_fails(numbers: Iterator[int]) -\u003e int:\r\n return next(numbers, None) or 0\r\n \r\ndef intermediate_is_ok(numbers: Iterator[int]) -\u003e int:\r\n my_number = next(numbers, None) or 0\r\n return my_number\r\n\r\ndef separate_line_is_ok(numbers: Iterator[int]) -\u003e int:\r\n result = next(numbers, None)\r\n return result or 0\r\n \r\ndef using_default_directly_is_ok(numbers: Iterator[int]) -\u003e int:\r\n return next(numbers, 0)\r\n\r\ndef having_optional_int_with_or_is_ok(number_maybe: int | None) -\u003e int:\r\n return number_maybe or 0\r\n```\r\nproduces the following report on `master`:\r\n```\r\nmain.py:4: error: Argument 2 to \"next\" has incompatible type \"None\"; expected \"int\" [arg-type]\r\n```\r\nThis is incorrect as `next(numbers, None) or 0` is always `int`.\r\nAll close variants, including assigning it to an intermediate variable, don't have this issue. \r\nI can't think of an actual application where you would want to write code like this, but I figured it's an interesting interaction that might warrant investigation.\r\n\r\nI couldn't find an open issue about this and I asked in Gitter.\r\n\r\n\r\n","author":{"url":"https://github.com/PGijsbers","@type":"Person","name":"PGijsbers"},"datePublished":"2023-07-23T20:42:17.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/15755/mypy/issues/15755"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:aa1a521e-fd68-fa25-4a31-9a55381faf7e |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B5CA:2FC8B3:2B2B2F8:392BFB5:6A5CE230 |
| html-safe-nonce | 72822d8ae7bb0863700914e3386102f2f7666e34ea1525e596a27c1b975734d0 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNUNBOjJGQzhCMzoyQjJCMkY4OjM5MkJGQjU6NkE1Q0UyMzAiLCJ2aXNpdG9yX2lkIjoiMzg0MDE3NjcwNTc5NDc5MDg4IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | b694a4dca70a9e230d0ee76bedf785b864c41c6fdb9ba53497f564141dcbe213 |
| hovercard-subject-tag | issue:1817290031 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/mypy/15755/issue_layout |
| twitter:image | https://opengraph.githubassets.com/97ae3d6da6b23ec68924c9445230f71c9a2bf206a8ea57d6acaf141431f7265a/python/mypy/issues/15755 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/97ae3d6da6b23ec68924c9445230f71c9a2bf206a8ea57d6acaf141431f7265a/python/mypy/issues/15755 |
| og:image:alt | The following MWE (mypy-playground): from typing import Iterator def this_fails(numbers: Iterator[int]) -> int: return next(numbers, None) or 0 def intermediate_is_ok(numbers: Iterator[int]) -> int... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | PGijsbers |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b |
| turbo-cache-control | no-preview |
| go-import | github.com/python/mypy git https://github.com/python/mypy.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 7053637 |
| octolytics-dimension-repository_nwo | python/mypy |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 7053637 |
| octolytics-dimension-repository_network_root_nwo | python/mypy |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c975978430e9ad293956f2bbdaf153b1bd84a99 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width