繁体   English   中英

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

[英]I keep getting an error called 'int' object has no attribute 'replace'

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

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))

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

您想要的是:

standardize_phone_number('123-456-7890')

编辑:在返回None

使用上面的输入,您的代码将到达最终的else ,因此返回None 由于您删除了所有出现的字符'('')'' ''-' ,因此phone_number字符串将只是输入的数字(假设输入的电话号码格式正确)。 因此,您的所有if条件都不会达到True

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

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调用压缩为一个:

import re

def standardize_phone_number(phone_number):
    phone_number = re.sub(r'[()\s-]', '',  phone_number)
    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")

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

改变你的通话方式

print(standardize_phone_number(123-456-7890))

从这到

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM