我不断收到错误消息,称为“ int”对象没有属性“ replace”

时间:2018-10-07 04:12:49

标签: python python-3.x

对于我的代码,我不需要替换数字,只需替换括号和破折号之类的东西,我以为我在代码中指定了它,但仍然无法正常工作。这是代码:

def standardize_phone_number(phone_number):
    phone_number = str(phone_number.replace('(', '')\
                         .replace(')', '')\
                         .replace(' ', '')\
                         .replace('-', ''))

    if not (phone_number.isdigit() and len(phone_number) == 10):
        return None

    if phone_number[0] == '(' and phone_number[4:6] == ')' and \
       phone_number[9] == '-' and len(phone_number) == 13:
        return phone_number.replace('(', '').replace(')', '-')

    if phone_number[3] == '-' and phone_number[7] == '-' and \
       len(phone_number) == 11:
        return phone_number.replace('-', '').replace('-', '')

    if phone_number[5] == ' ' and phone_number[9] == '-' and \
       len(phone_number) == 13:
        return phone_number.replace(' ', '').replace('-', '')
    else:
        return None
print(standardize_phone_number(123-456-7890))

3 个答案:

答案 0 :(得分:4)

问题是您将int作为输入传递给standardize_phone_number,特别是int 123-456-7890,而{{ 1}}需要一个字符串。

您想要的是:

-8223

编辑:返回standardize_phone_number

使用上面的输入,您的代码将到达最后的standardize_phone_number('123-456-7890') ,因此返回None。由于您删除了所有出现的字符elseNone'('')',因此' '字符串将只是输入的数字(假设输入有效的电话号码格式)。因此,您的'-'条件都不会等于phone_number

看起来您是要从电话号码中删除字符ifTrue'('')'的所有实例,然后返回数字电话号码。在这种情况下,您可以将代码减少为:

' '

使用'-',您可以将所有这些def standardize_phone_number(phone_number): phone_number = str(phone_number.replace('(', '')\ .replace(')', '')\ .replace(' ', '')\ .replace('-', '')) if phone_number.isdigit() and len(phone_number) == 10: return phone_number else: raise ValueError("The number you entered is not a valid phone number") 调用压缩为一个:

re.sub

当然,replace是可选的,您可以实施您认为对无效电话号码正确的处理。

答案 1 :(得分:0)

更改您的调用方法

print(standardize_phone_number(123-456-7890))

从这里到

print(standardize_phone_number('123-456-7890'))

然后它将正常工作,因为只有具有“ replace()”方法的字符串对象

答案 2 :(得分:0)

您的代码检查phone_number是否为数字,如果不是,则不返回任何数字。 在应用了这篇文章的建议后,它将始终返回None,因为现在phone_number始终是字符串。

if not (phone_number.isdigit() and len(phone_number) == 10):
    return None

注释掉这两行,应该可以解决您的重复性问题。