为什么';python电话号码库在这种情况下工作吗?

为什么';python电话号码库在这种情况下工作吗?,python,libphonenumber,Python,Libphonenumber,似乎“5187621769”应该是phonenumbers库很容易解析的数字。10位数字,美国区号。但是…运气不好 设置: import phonenumbers number = '5187621769' parsed = phonenumbers.parse(number) parsed = phonenumbers.parse("+" + number) 方法1: import phonenumbers number = '5187621769' parsed = phonenum

似乎“5187621769”应该是phonenumbers库很容易解析的数字。10位数字,美国区号。但是…运气不好

设置:

import phonenumbers
number = '5187621769'
parsed = phonenumbers.parse(number)
parsed = phonenumbers.parse("+" + number)
方法1:

import phonenumbers
number = '5187621769'
parsed = phonenumbers.parse(number)
parsed = phonenumbers.parse("+" + number)
这会抛出一个错误

方法2:

import phonenumbers
number = '5187621769'
parsed = phonenumbers.parse(number)
parsed = phonenumbers.parse("+" + number)
给出的国家代码=51,而不是美国

我知道我能做到:

parsed = phonenumbers.parse(number,region="US")

但我并不总是知道这个数字会是我们(这只是我发现自己没有得到想要的行为的一个例子)。是否有我遗漏的选项或格式技巧?谢谢

如果phonenumbers是美国唯一的图书馆,那将是一个非常简单的数字。您缺少“+1”a.k.a.国家代码。如果您想假设PhoneNumber无法解析的数字是美国数字,您可以执行以下操作:

try:
    parsed = phonenumbers.parse(number)
except phonenumbers.NumberParseException as npe:
    parsed = phonenumbers.parse('+1{}'.format(number))
您只需使用:

parsed = phonenumbers.parse(number, 'US')

在搜索电话号码详细信息时,您必须使用电话号码编写国家代码

此外,这里还有一个用于电话号码的API(libphonenumber的包装):


如果您不指定地区,也不使用国际拨号代码,它怎么知道这是美国电话号码?我认为它应该能够猜测10位数字本身就构成一个电话号码。什么是“parsed=phonenumbers.parse(“518-762-1769”)生产?
+51
是一种完全合法的国际拨号代码(秘鲁的);它怎么知道这不是你的意思?@ojblass
NumberParseException:(0)缺少或无效的默认区域。
我相信,如果我们把+1、+91、+22代码放在API可能不响应的数字之前,我们会有像:+1-2345-2333这样的数字,我相信API在这些情况下不起作用。它在这种情况下也能起作用,因为包装器API忽略了所有字符。有帮助的是,我将尝试让结果发布。请注意,我正在使用此包装器。您可以从Github()下载此包装器,并在自己的服务器或主机上运行