# StopIteration analog in Julia

**URL:** <https://discourse.julialang.org/t/stopiteration-analog-in-julia/27946>\
**Category:** New to Julia\
**Tags:** question\
**Created:** [August 24, 2019, 6:53pm UTC](https://discourse.julialang.org/t/stopiteration-analog-in-julia/27946 "2019-08-24T18:53:20Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![natemcintosh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/natemcintosh/32/9021_2.png) [@natemcintosh](https://discourse.julialang.org/u/natemcintosh)\
**Post date:** [August 24, 2019, 6:53pm UTC](https://discourse.julialang.org/t/stopiteration-analog-in-julia/27946/1 "2019-08-24T18:53:20Z")

</div>

Hi Everyone,  
I recently wrote this code in python (I’m enjoying learning how to write code in a functional manner) that returns whatever numbers are at the end of a string (fails out if there aren’t any).

```python
from functools import reduce
from operator import add

def get_num_from_end_of_string(string: str) -> int:
    backward_nums = list(filter(picky_digit, reversed(string)))
    return int(reduce(add, reversed(backward_nums)))

def picky_digit(s: str) -> bool:
    if s.isdigit():
        return True
    else:
        raise StopIteration

```

And I’d like to learn how to write something similar in Julia. In a looped version of this, I would put a `break` after we stop getting digits. In Python I mimic the `break` with a `StopIteration`. How can I do this in Julia?  
(Any suggestions to make the Python version better are also welcome)

---

<div class="post-metadata">

**Author:** ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)\
**Post date:** [August 24, 2019, 7:31pm UTC](https://discourse.julialang.org/t/stopiteration-analog-in-julia/27946/2 "2019-08-24T19:31:15Z")

</div>

Take a look at [Writing Iterators in Julia 0.7](https://julialang.org/blog/2018/07/iterators-in-julia-0.7) and [Interfaces · The Julia Language](https://docs.julialang.org/en/v1/manual/interfaces/#man-interface-iteration-1).

---

<div class="post-metadata">

**Author:** ![tkf](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tkf/32/17635_2.png) [@tkf](https://discourse.julialang.org/u/tkf)\
**Post date:** [August 24, 2019, 9:16pm UTC](https://discourse.julialang.org/t/stopiteration-analog-in-julia/27946/3 "2019-08-24T21:16:54Z")

</div>

`StopIteration` analog in Julia is return-`nothing`-from-`iterate`. See the link above formore info.

You can also use [`IterTools.takewhile`](https://juliacollections.github.io/IterTools.jl/latest/#takewhile(cond,-xs)-1) ([`itertools.takewhile`](https://docs.python.org/3/library/itertools.html#itertools.takewhile) in Python) to directly do what you want.

> [@natemcintosh](#):
>
> Any suggestions to make the Python version better

I strongly suggest to not use function like `picky_digit`. The predicate function you passed to `filter` is better not to have any visible side-effects. This applies to coding in Julia and I guess in any languages.
