You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

尼日利亚手机号验证函数调用报错invalid token及功能问题求助

问题排查:尼日利亚手机号验证函数的"invalid token"报错与功能异常

一、先解决"invalid token"报错

你调用函数时传的参数是09064764777——这是个整数,但在Python里,整数不能以0开头(只有八进制数允许前导0,但八进制数只能包含0-7,你的数字里有9,所以解释器直接抛出"invalid token"错误)。

解决方法很简单:调用函数时必须传入字符串类型的手机号,比如:

is_PhoneNumber("09064764777")

二、验证功能的几个异常问题

除了报错,你的函数逻辑还有几个明显的问题,导致无法正确验证尼日利亚手机号:

  • 前两位判断逻辑完全错误:
    你用number[:2]取前两位,但如果number是字符串,这是字符串类型,而list(range(70, 91))是整数列表,两者根本无法直接比较。尼日利亚手机号的前缀是70-89之间的两位数,你需要先把前两位转成整数,再判断是否在这个范围内。

  • exit()的使用太粗暴:
    每次验证失败就直接终止整个程序,这会让函数的复用性极差。更好的做法是返回布尔值(True/False),让调用方自己决定后续操作。

  • 长度验证的逻辑漏洞:
    当手机号长度不是10位时,你只打印了提示,但没有终止验证流程,程序会继续执行到最后,打印"This is a phone number",导致错误的判断结果。


三、修正后的完整代码

这里给你调整后的版本,修复了所有问题,同时让函数更健壮:

def is_PhoneNumber(number):
    # 先处理输入类型:如果不是字符串,尝试转成字符串
    if not isinstance(number, str):
        try:
            number = str(number)
        except:
            print("This is not a valid input")
            return False
    
    # 检查是否全为数字字符
    if not number.isdecimal():
        print("This is not a number at all")
        return False
    
    # 验证长度是否为10位
    if len(number) != 10:
        print("It's not a Nigerian phone number (invalid length)")
        return False
    
    # 验证前缀是否在70-89范围内
    try:
        prefix = int(number[:2])
        if not (70 <= prefix <= 89):
            print("This is not a Nigerian phone number (invalid prefix)")
            return False
    except:
        print("Invalid prefix format")
        return False
    
    print("This is a valid Nigerian phone number")
    return True

# 正确调用方式(传入字符串)
is_PhoneNumber("09064764777")

四、改进点说明

  1. 兼容字符串和可转换为字符串的输入,避免类型报错
  2. 用返回布尔值替代exit(),函数可以在任何场景下复用
  3. 给不同的错误场景添加了更明确的提示信息
  4. 确保任何验证失败都会提前返回,不会出现"错误验证通过"的情况

内容的提问来源于stack exchange,提问作者thorwoden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:44:04