Python拼接字符串和数字时会报错, 代码如下
import os import sys str = 'Python学科的分数为:' score = 90 print str + str(score) + '分'
执行结果:
Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/Python_Demo/filedemo.py", line 9, in <module> print str + str(score) + '分' TypeError: 'str' object is not callable
或者直接报: TypeError: cannot concatenate 'str' and 'int' objects
问题分析:
有两种常见错误
1. 当一般内部函数被用作变量名后可能出现此错误。比如: range=1 for i in range(0,1):
这样的错会报在for行,但是时间引起的原因却是在range=1这行,如果两行相距较远,怎很难被发现。所以要特别注意不要用内部已有的变量和函数名作自定义变量名。
2. 或者str被预先定义了
str=10 for i in range(1,10): print str(i)
解决方法:
只有提前把num转换为字符串类型,可以使用bytes函数把int型转换为string型。
str = 'Python学科的分数为:' score = 90 print str + bytes(score) + '分'
如果将字符串加u转换为unicode字符后,会报另外一个错误
代码如下:
import os import sys result = u'Python学科的分数为:' score = 90 print result + bytes(score) + '分'
执行结果:
Traceback (most recent call last):
File "C:/Users/Administrator/PycharmProjects/Python_Demo/filedemo.py", line 8, in <module>
print result + bytes(score) + '分'
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
问题分析:
原因就是python的str默认是ascii编码,和unicode编码冲突,就会报这个标题错误
解决方法:
import os import sys reload(sys) sys.setdefaultencoding('utf-8') result = u'Python学科的分数为:' score = 90 print result + bytes(score) + '分'
对需要 str->unicode 的代码,可以在前边写上 import sys reload(sys) sys.setdefaultencoding('utf8') 把 str 编码由 ascii 改为 utf8 (或 gb18030)