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 函数。然后它在 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。您正在尝试将 a 添加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 中,尝试向 a 添加一些东西是str通过尝试将其他东西隐式转换为 a 开始的str,并且正如错误所说,你不能用 a 来做到这一点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

好的,最后一个成功了,所以问题出在strlen + 1. 其他一切都无关紧要。所以,你已经缩小了你必须弄清楚、询问和/或理解的范围。

最后,如果你想让我们弄清楚这个main函数出了什么问题,以及为什么它传递的是 astr而不是int你所期望的,你必须向我们展示这个函数。(在我的脑海中,我的第一个猜测是您正在使用input从用户那里获取长度,而不是转换它,可能是因为您阅读的是 Python 2 文档input而不是 Python 3 文档。但我会给这个猜测最多 20% 的机会是正确的。)

于 2012-12-27T21:13:53.340 回答
0

由于您需要一个整数,因此您可以将其强制转换为您想要的类型,如果无法转换,您将收到 TypeError 或 ValueError:

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