【Python】配列になるはずの戻り値が何故かNoneになっちゃうよと思ってたけどそりゃそうなるだろって話
現象
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時間も迷いましたよ・・・
教訓
一文でいろいろやってそうな記述を疑え。