使用 pdb 进行调试。
清单 1. 测试代码示例
import pdb
a = "aaa"
pdb.set_trace()
b = "bbb"
c = "ccc"
final = a + b + c
print final
开始调试:直接运行脚本,会停留在 pdb.set_trace() 处,选择 n+enter 可以执行当前的 statement。在第一次按下了 n+enter 之后可以直接按 enter 表示重复执行上一条 debug 命令。
清单 2. 利用 pdb 调试
[root@rcc-pok-idg-2255 ~]# python epdb1.py
>/root/epdb1.py(4)?()
->b = "bbb"
(Pdb) n
>/root/epdb1.py(5)?()
->c = "ccc"
(Pdb)
>/root/epdb1.py(6)?()
->final = a + b + c
(Pdb) list
1 import pdb
2 a = "aaa"
3 pdb.set_trace()
4 b = "bbb"
5 c = "ccc"
6 ->final = a + b + c
7 print final
[EOF]
(Pdb)
[EOF]
(Pdb) n
>/root/epdb1.py(7)?()
->print final
(Pdb)
提示write输入的参数是字符串类型str,不是字节类型bytes。
在python3中,不能以任何隐式方式将str和bytes类型二者混合使用。不可以将str和bytes类型进行拼接,不能在str中搜索bytes数据(反之亦然),也不能将str作为参数传入需要bytes类型参数的函数(反之亦然)。
问题应该是出在了s.encode('acsii')上
strings可以被编码(encode)成字bytes,bytes也可以解码(decode)成strings:
>>> '€20'.encode('utf-8')b'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.decode('utf-8')
'€20'