Python 3.3中非常奇怪的bug

Python 3.3中非常奇怪的bug,python,string,Python,String,好的,我做了一个小函数,它允许我把一个字符串变成32个字符的乘法器,但是当我使用string.replace时,我得到了一些非常非常奇怪的错误。因为它让我拉扯我的头发,你们能看看我遗漏了什么吗 Variables: self.blockSize = 32 self.interrupt = '$^EnD#Block^$' self.filler = '#' Functions: def pad(self, data): jo

好的,我做了一个小函数,它允许我把一个字符串变成32个字符的乘法器,但是当我使用string.replace时,我得到了一些非常非常奇怪的错误。因为它让我拉扯我的头发,你们能看看我遗漏了什么吗

Variables:
        self.blockSize = 32
        self.interrupt = '$^EnD#Block^$'
        self.filler = '#'

Functions:
    def pad(self, data):
        joint1 = ''.join([data, self.interrupt])
        joint2 = self.filler * ((self.blockSize - len(joint1)) % self.blockSize) 
        return ''.join([joint1, joint2])

    def unpad(self, data):
        data = str(data).rstrip(self.interrupt)
        return data.replace(self.filler, '')

Call:
p = e.pad('this is not a very good idea  yo')
print(p)
print(e.unpad(p))


Output:
    Jans-MacBook-Pro:test2 jan$ ../../bin/python3 data.py 
    this is not a very good idea  yo123$^EnD#Block^$################
    this is not a very good idea  yo123
    Jans-MacBook-Pro:test2 jan$ ../../bin/python3 data.py 
    this is not a very good idea  yo$^EnD#Block^$###################
    this is not a very good idea  y
    Jans-MacBook-Pro:test2 jan$ 
它使o在yo中消失。啊!但如果我在后面加上一些随机数,什么都不会消失

解决方案-编辑:我的坏。我把self.filler和self.interrupt放错地方了。我现在很尴尬。守则应该是:

def unpad(self, data):
    data = str(data).rstrip(self.filler)
    return data.replace(self.interrupt, '')
读取
rstrip

chars参数是一个字符串,指定要删除的字符集

rstrip
删除传递的字符集中存在的所有尾随字符。它不会删除按该顺序包含这些字符的尾随子字符串<代码>'abczyx'.rstrip('xyz')给出了
'abc'
,而
'abczyx'.rstrip('zyx')
也给出了
'abc'
读取
rstrip

chars参数是一个字符串,指定要删除的字符集


rstrip
删除传递的字符集中存在的所有尾随字符。它不会删除按该顺序包含这些字符的尾随子字符串<代码>'abczyx'.rstrip('xyz')给出了
'abc'
,而
'abczyx'.rstrip('zyx')
也给出了
'abc'
s1+s2
''的一个较短的等价物。join([s1,s2])
。你应该让这个问题的标题更具描述性,以备以后搜索。有人说join更快…@JanNetherdrake取决于[1]:%timeit“test”+“test”中字符串
的大小。
100000000个循环,每个循环最好3:15.2ns
在[2]:%timeit.”join((“test”,“test”))
10000000个循环,每个循环最好3:98.9纳秒
作为旁白,
s1+s2
''的一个较短的等价物。join([s1,s2])
。你应该让这个问题的标题更具描述性,以防以后搜索。有人说join更快…@JanNetherdrake取决于[1]中字符串的大小
:%timeit“test”+“test”
<10000000个循环,每个循环的最佳值为3:15.2ns
在[2]:%timeit>中。加入((“test”,“test”)
<10000000个循环,每个循环的最佳值为3:98.9ns好的。但是为什么.replace和.rstrip会删除o,而o在第一个位置上没有定义要删除?当字符串以“yo”结尾时,它以“o”结尾。“o”出现在“中断”字符串中,这意味着它是要删除的字符之一。所以它被剥离了。哦,糟糕,我找到了问题的原因:)我分别错放了self.filler和self.interrupt。这有多蠢?好吧。但是为什么.replace和.rstrip会删除o,而o在第一个位置上没有定义要删除?当字符串以“yo”结尾时,它以“o”结尾。“o”出现在“中断”字符串中,这意味着它是要删除的字符之一。所以它被剥离了。哦,糟糕,我找到了问题的原因:)我分别错放了self.filler和self.interrupt。这有多愚蠢?