python typeerror* wants int_python中“TypeError: Can't convert 'int' object to str implicitly"报错的解决办法...

原文出处:

一、问题

我在尝试着写一个文字游戏,遇到了一个函数错误,这个函数实现的功能是:在你输入完字符后,就会消耗你的技能分。刚开始时报错信息显示我在试图用一个整数减去一个字符,对应代码为“balance - strength”,这个错误很明显,因此我将其改为“strength = int(strength)”修复了... 但是现在我遇到了一个以前从未见过的错误(o(╯□╰)o我是一个新手),我不知道它试图在告诉我什么以及如何修复它。

以下为该函数对应的代码:def attributeSelection():

balance = 25

print("Your SP balance is currently 25.")

strength = input("How much SP do you want to put into strength?")

strength = int(strength)

balanceAfterStrength = balance - strength

if balanceAfterStrength == 0:

print("Your SP balance is now 0.")

attributeConfirmation()

elif strength 

print("That is an invalid input. Restarting attribute selection. Keep an eye on your balance this time!")

attributeSelection()

elif strength > balance:

print("That is an invalid input. Restarting attribute selection. Keep an eye on your balance this time!")

attributeSelection()

elif balanceAfterStrength > 0 and balanceAfterStrength 

print("Ok. You're balance is now at " + balanceAfterStrength + " skill points.")

else:

print("That is an invalid input. Restarting attribute selection.")

attributeSelection()

以下为运行此部分代码后的报错信息:Your SP balance is currently 25.

How much SP do you want to put into strength?5

Traceback (most recent call last):

File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 205, in 

gender()

File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 22, in gender

customizationMan()

File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 54, in customizationMan

characterConfirmation()

File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 93, in characterConfirmation

characterConfirmation()

File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 85, in characterConfirmation

attributeSelection()

File "C:\Python32\APOCALYPSE GAME LIBRARY\apocalypseGame.py", line 143, in attributeSelection

print("Ok. You're balance is now at " + balanceAfterStrength + " skill points.")

TypeError: Can't convert 'int' object to str implicitly

(提问者报错信息中涉及较多,部分为其项目代码文件。为缩短报错信息,我将提问者所提到的函数部分代码粘贴到本机后,运行完对应的报错信息如下)Your SP balance is currently 25.

How much SP do you want to put into strength?5

Traceback (most recent call last):

File "test.py", line 26, in 

attributeSelection()

File "test.py", line 20, in attributeSelection

print("Ok. You're balance is now at " + balanceAfterStrength + " skill points.")

TypeError: cannot concatenate 'str' and 'int' objects

有人知道如何解决这个问题吗?先行感谢。

二、答案

你不能将整型(int)与字符串(string)连在一起。你需要使用'str'函数将整型(int)转换为字符型(string),或者使用'formatting'格式化输出。

将print("Ok. Your balance is now at " + balanceAfterStrength + " skill points.")

改为:

({}  .format方式)print("Ok. Your balance is now at {} skill points.".format(balanceAfterStrength))

或改为:

(使用str函数转换类型)print("Ok. Your balance is now at " + str(balanceAfterStrength) + " skill points.")

或按照下面的一条评论所提及的那样做,使用','将不同的字符串传递给print函数,而不是使用'+'连接。(涉及的评论为:你不能使用','连接字符串;你可以用','将参数分开传递给print函数,这些参数会以空格分割,一个接一个的打印出来,)print("Ok. Your balance is now at ", balanceAfterStrength, " skill points.")

三、总结

当同时打印字符及整型变量时,有以下几种方式来避免“TypeError”报错。

假设变量temp = 3,要输出的内容为the number you input is 3.

1.使用str强制将整型转换为字符型print 'the nume you input is ' + str(temp)print 'the nume you input is %s' % tempprint 'the nume you input is {}' .format(temp)

4.使用逗号将变量和字符串分隔print 'the nume you input is' , temp

四、% 及 .format() 两种格式化输出对比

更多实例对比请参考:基本输出

Old    '%s %s' % ('one', 'two')

New    '{} {}'.format('one', 'two')

Output    one two

Old    '%d %d' % (1, 2)

New    '{} {}'.format(1, 2)

Output    1 2

#右对齐

Old    '%10s' % ('test',)

New    '{:>10}'.format('test')

Output        test    #test左边有六个空格

#左对齐

Old    '%-10s' % ('test',)

New    '{:10}'.format('test')

Output    test       #test右边有六个空格

#字典

person = {'first': 'Jean-Luc', 'last': 'Picard'}

New    '{p[first]} {p[last]}'.format(p=person)

Output    Jean-Luc Picard

#列表

data = [4, 8, 15, 16, 23, 42]

New    '{d[4]} {d[5]}'.format(d=data)

Output    23 42

#Accessing arguments by position:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c')

'a, b, c'

>>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only

'a, b, c'

>>> '{2}, {1}, {0}'.format('a', 'b', 'c')

'c, b, a'

>>> '{2}, {1}, {0}'.format(*'abc')      # unpacking argument sequence

'c, b, a'

>>> '{0}{1}{0}'.format('abra', 'cad')   # arguments' indices can be repeated

'abracadabra'

#Accessing arguments by name:

>>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')

'Coordinates: 37.24N, -115.81W'

>>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}

>>> 'Coordinates: {latitude}, {longitude}'.format(**coord)

'Coordinates: 37.24N, -115.81W'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值