try と except 以外の方法


説明のとおり、「時折数字、時折文字列のみ」のような入力に対して、下記のような処理を書いているのですが、何でも `try and except`
に投げるのはよくないと聞きました。

下記のような処理の時 `try and except` に頼らず、変数 `a`
の振り分けをするにはいかがしたらよろしいでしょうか。お知恵を拝借できましたら幸いです。

**現状のコード:**

[code]

    a = "基本的に数字が入るが、たまに数字を含まない文字列が入る"
    b = 0
    
    try :
        b = int(a)
        # 数字だったときの処理
    except :
        # 文字列だったときの処理
        pass
    
[/code]




本家(英語)StackOverflowの [Is there a built-in or more Pythonic way to try to parse
a string to an integer](https://stackoverflow.com/questions/2262333/)
に様々な回答がついていますが、質問中の用途であれば素直に例外機構の利用をおすすめします。`except`では値変換に失敗したことを表す
[`ValueError`例外](https://docs.python.org/ja/3/library/exceptions.html#ValueError)
の明示が好ましいです。

[code]

    try :
        b = int(a)
        # 数字だったときの処理
    except ValueError:
        # 文字列だったときの処理
        pass
    
[/code]

* * *

> 何でも try and except に投げるのはよくないと聞きました。

プログラム設計の一般論として、むやみに例外機構を用いるのが好ましくないことは合意します。

その一方、他プログラミング言語に比べるとPython例外機構は比較的カジュアルに使われるのも事実です。例えば反復的ループ処理を停止させるために
[`StopIteration`例外](https://docs.python.org/ja/3/library/exceptions.html#StopIteration)
が使われます。

外部記事「[Pythonで例外を投げるときのベストプラクティス](https://qiita.com/hasoya/items/05d4e49d492869875cca)」も参考にどうぞ。

