![](/img/trans.png)
[英]I keep getting an attribute error 'int' object has no attribute 'dollars'
[英]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.