【Python】配列になるはずの戻り値が何故かNoneになっちゃうよと思ってたけどそりゃそうなるだろって話

現象

  • Python再帰処理して配列をガンガン追加した結果を返すプログラムつくったった。
def main(hogelist:list) -> list:
    if len(hogelist) > 5:
        return hogelist.append("b")
    hogelist.append("a")
    return main(hogelist)

if __name__ == "__main__":
    hogelist = main([])
    print(",".join(hogelist))

実行!!

すると print(",".join(hogelist)) の部分で

TypeError: can only join an iterable

・・・例外になったった。 なぜ??

原因

return hogelist.append("b")の部分で戻り値がNoneになったから。

そりゃそうだ。

何故かhogelist.append("b")した後のhogelistが帰ってくることを期待してしまった。

実際はappendメソッドの戻り値であるNoneが返る。

Pythonは戻り値無し(void)が無くメソッドに必ず戻り値が設定されており、戻り値として何も指定しなかった場合はデフォルト値のNoneが返される。

こんなもんに2時間も迷いましたよ・・・

教訓

一文でいろいろやってそうな記述を疑え。