【问题标题】:TypeError: cannot concatenate 'str' and 'tuple' objects in python 2.7TypeError:无法在 python 2.7 中连接“str”和“tuple”对象
【发布时间】:2019-12-31 00:11:24
【问题描述】:

我在 python 中使用parameterized functions。我正在传递一些字符串值并访问它的值。

这是我的函数定义的样子:

import constants

def print_error_table(self, header1, errormsg, icon):
        # for header1
        print(constants.GREEN)
        print(constants.REPORT_HEADER_ERR)
        print(constants.DATE_TIME)
        print(constants.SPACE)
        start = "|   |           "+constants.ICON_BOX

        header1_count = len(header1)

        available_space_for_first_part = 37 - (len(start) + header1_count)

        s = ""
        print(constants.REPORT_ROOF)
        print(constants.REPORT_COLUMNS)
        print(constants.REPORT_FLOOR)
        print(constants.REPORT_MIDDLE)
        print(start),
        print(" "+constants.NC+header1+constants.GREEN),

        for i in range(available_space_for_first_part):
             s += " "

        print(s),
        print("|"),

        # right part
        end = "                "
        end2 = "|    |"
        s2 = ""
        icon_count = len(icon)
        available_space_for_second_part = 31 - (len(end) + icon_count)
        print(end),
        print(icon),
        for i in range(available_space_for_second_part):
            s2 += " "
        print(s2),
        print(end2)

        print(constants.REPORT_SHORT_HORIZONTAL_LINE)
        print(constants.REPORT_MIDDLE_NO_MIDDLE_SEPTUM)


        # print(len(constants.SPACE)) # 84

        # print first 40 characters
        start = "|   |"
        print(start),
        s3 = ""

        for i in range(12):
            print(" "),
        print(constants.RED),
        msg = "1.) " + errormsg,
        print(""+msg), # this is where my error is getting

        print(constants.GREEN),

        # print(constants.RED+constants.ICON_CROSS+msg+constants.GREEN),

        for i in range(12, 57 - len(msg)-1):
            s3 += " "
        print(s3),
        print("|    |"),
        print("")
        print(constants.REPORT_MIDDLE_NO_MIDDLE_SEPTUM)
        print(constants.REPORT_MIDDLE)
        print(constants.REPORT_FLOOR)
        print(constants.REPORT_FOOTER)

这是我从中调用此函数的另一个 python 文件。

error_message = "\"etcd\" is impaired\n"
print_error_table(self, "ETCD", error_message, constants.ICON_CROSS)

我得到这个错误:

文件“/home/jananath/Desktop/python-script/2/bitesizetrouble/report_error.py”,第 57 行,在 print_error_table 打印(“”+味精), TypeError: 无法连接 'str' 和 'tuple' 对象

问题是我传递的值(即error_message)没有作为string 传递,它是某种更改的文本,出于某种原因。

我之所以这么说是因为,在上面的(第一个)命令中,它显示的是 print(""+str(msg)),而不是这个,当我尝试 print(msg), 时,它会给出一些像这样的奇怪输出。

(`"etcd" 受损\n',)

您可以看到每边都有两个parenthesis。它来自哪里以及为什么我不能将传递给函数的字符串与另一个字符串连接起来(即print(""+str(msg))

更新:我正在使用 , 来停止 print() 打印新行。这是我在 python 2.7.5 中应该这样做的方式

【问题讨论】:

  • 我注意到您的许多代码语句都以逗号结尾。如果您认为它在 C 或 javascript 等语言中的行为类似于分号,那么情况并非如此。尾随逗号通常会将其前面的对象转换为元组。尝试删除所有这些,尤其是msg = "1.) " + errormsg, 末尾的那个,看看是否有帮助。
  • 如果你只是学习 Python,你可能应该放弃 Python 2 并专注于学习当前推荐和支持的语言版本,即 Python 3。
  • @Kevin 我正在使用, 停止print() 打印新行。这是我在python 2.7.5 中应该这样做的方式
  • @tripleee,不,我使用python 2.7.5 是有原因的。我无法改回最新版本。
  • 尾随逗号是特定于print 的,但你已经将它撒在了很多它不这样做的地方。它创建了一个元组,现在你很生气你有一个元组。

标签: python


【解决方案1】:

您的代码中充满了逗号,而您又将逗号放在了错误的位置。

您可以通过在字符串赋值的末尾添加一个逗号来创建一个包含一个元素的元组。见:

>>> foo = "bar"
>>> print(foo)
bar
>>> foo = "bar",
>>> print(foo)
('bar',)

我建议您从 python.org (https://docs.python.org/3/tutorial/index.html) 上的 Python 教程开始。严重地。并且不要学习 Python 2,它不再是。认真的。

【讨论】:

  • 如您所见,我已经更新了问题。我需要将其中一些打印输出打印在同一行而不打印新行。出于某种原因,我应该使用 python 2.7。我无法切换回旧版本。有没有另一种方法可以在不打印新行的情况下单行打印?
  • @JananathBanuka 我的回答回答了你的问题。由于尾随逗号,您的代码在这里创建了一个字符串元组:msg = "1.) " + errormsg, - 它与打印无关。
  • 是的,这行得通,但我传递的字符串仍然有问题。当我得到输出时,它会给出很多字符(比如隐藏的字符)。当我只是给出一个随机输出时,它打印没有任何异常。
  • @JananathBanuka stackoverflow.com/help/minimal-reproducible-example 是有用的阅读材料,可以帮助您更快地获得更好的答案。
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2015-09-01
相关资源
最近更新 更多