0
def display_positive_indices(strlen):
    print()
    print(' ', end='')
    for i in range(strlen + 1):
        print(i, end='')
        if i != strlen:
            print(' ' * (4 - len(str(i))), end='')
    print()

こんにちは、私はプログラミングに不慣れです。これは私のコードです。エラーは最初にmain関数を指します。次に、メインでこの関数を指し、次に: for i in range(strlen + 1)を指しますType Error: Can't convert 'int' object to str implicitly。なぜこれを言うのですか?このエラーを修正するにはどうすればよいですか?

4

2 に答える 2

7

次のような整数で呼び出すと、関数は正常に機能します。

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です。を に追加しようとしてstrintます。これだけでまったく同じエラーが発生します。

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% です。)strintinputinput

于 2012-12-27T21:13:53.340 に答える
0

整数が必要なので、それを希望する型に強制できます。変換できない場合は、TypeError または ValueError が返されます。

...
strlen = int(strlen)
for i in range(strlen + 1):
    ...
于 2012-12-27T22:09:08.423 に答える