次のような整数で呼び出すと、関数は正常に機能します。
In [499]: display_positive_indices(3)
0 1 2 3
しかし、文字列で呼び出すと、このエラーが発生し、インタープリターが詳細情報を伝えます。
In [500]: display_positive_indices('3')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-500-dd39f751056c> in <module>()
----> 1 display_positive_indices('3')
<ipython-input-495-ac7e32dd0c50> in display_positive_indices(strlen)
2 print()
3 print(' ', end='')
----> 4 for i in range(strlen + 1):
5 print(i, end='')
6 if i != strlen:
TypeError: Can't convert 'int' object to str implicitly
問題はそれstrlen + 1
です。を に追加しようとしてstr
いint
ます。これだけでまったく同じエラーが発生します。
In [501]: strlen = '3'
In [502]: strlen + 1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-502-5a3ed0dba868> in <module>()
----> 1 strlen + 1
TypeError: Can't convert 'int' object to str implicitly
Python 3 では、何かを に追加しようとするstr
と、その他のものを に暗黙的に変換しようとすることから始まりstr
ます。エラーが示すように、 . ではそれを行うことはできませんint
。
一方、今後の参考のために、次のようなエラーをデバッグする方法を次に示します。
まず、関数のどの行にエラーがあるかを知っています。そのため、エラーがなくなるまで削除を続けてください。初め:
def display_positive_indices(strlen):
for i in range(strlen + 1):
pass
同じエラー。そう:
def display_positive_indices(strlen):
range(strlen + 1)
そしてまた:
def display_positive_indices(strlen):
strlen + 1
と:
def display_positive_indices(strlen):
strlen
OK、最後の 1 つが成功したので、問題は にありましたstrlen + 1
。他のすべては無関係です。これで、理解しなければならないこと、質問すること、および/または理解しなければならないことが絞り込まれました。
最後に、関数の何が問題なのか、また、期待したものではなくmain
関数が渡された理由を突き止めたい場合は、その関数を表示する必要があります。(私の頭の中で、私の最初の推測では、ユーザーから長さを取得するために使用していて、変換していないということです。おそらく、Python 3 ドキュメントではなく Python 2 ドキュメントを読んでいるからでしょう。しかし、私はその推測が正しくなる可能性はせいぜい 20% です。)str
int
input
input