使用casefold()时,我遇到了一个错误,“AttributeError: 'str' object has no attribute 'casefold'”。

4
vowels = 'aeiou'

# take input from the user
ip_str = raw_input("Enter a string: ")

# make it suitable for caseless comparisions
ip_str = ip_str.casefold()

# make a dictionary with each vowel a key and value 0
count = {}.fromkeys(vowels,0)

# count the vowels
for char in ip_str:
    if char in count:
        count[char] += 1

print(count)

错误:

    Line - ip_str = ip_str.casefold()
AttributeError: 'str' object has no attribute 'casefold'
2个回答

7

Python 2.6不支持str.casefold()方法。

根据str.casefold()文档

版本3.3中新增。

您需要切换到Python 3.3或更高版本才能使用它。

除了自己实现Unicode大小写折叠算法之外,没有好的替代方案。请参见如何在Python 2中折叠字符串大小写?

但是,由于您在处理一个字节串(而不是Unicode),所以您可以只使用str.lower()并完成它。


请问你能解释一下这个语句吗?count = {}.fromkeys(vowels,0) - Nikhil Kadam
在上面的评论中,{ }.fromkeys() 是什么意思? - Nikhil Kadam
@NikhilKadam:使用dict.fromkeys()类方法的方式相当谨慎,它创建一个新字典,其中vowels中的元素作为键,每个键的值都设置为0 - Martijn Pieters

2
在 Python 2.x 中,使用 casefold() 将会导致错误。
你可以使用 lower(),虽然它们不完全相同但是可比较的。
参考:str.casefold() 引用:

Casefolding 类似于 lowercase,但更加强力,因为它旨在消除字符串中所有的大小写区别。例如,德语小写字母 'ß' 等价于 "ss"。由于它已经是小写字母,lower() 对 'ß' 不会产生任何影响;casefold() 将其转换为 "ss"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接