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

为何check_isbn13函数检查整数时,非整数输入会报错?

check_isbn13函数非int输入“出错”的原因

先看你写的函数代码:

def check_isbn13(a):
    if type(a)== int: # check for int
        return True
    else:
        return False 

首先明确:这个函数本身不会在输入非int类型时抛出异常,它只会返回False。你说的“输出错误”分两种情况分析:

情况1:调用时抛出了异常

如果是运行时抛出了诸如ValueError之类的错误,问题根本不在这个函数里,而是你调用它的方式有问题。比如你可能写了这样的代码:

user_input = input("输入ISBN:")
check_isbn13(int(user_input))

当用户输入的是带非数字字符的字符串、长度过长的数字串,或者空内容时,int(user_input)这一步就会直接报错,和check_isbn13函数无关。

情况2:函数返回False但你认为应该返回True

这是因为你的函数逻辑完全偏离了ISBN13的验证需求:

  • ISBN13本质是13位有效数字串,实际场景中常以字符串形式存在(比如带前导零,或者用户直接输入字符串),但你的函数只检查参数是否为int类型,完全不验证数字的长度、是否符合ISBN13的校验规则。
  • 比如,随便一个整数(如123)会被函数判定为True,但它根本不是合法的ISBN13;而合法的ISBN字符串(如'9780140449112')会被函数判定为False,这显然不符合实际需求。

另外补充一点:用type(a) == int做类型判断不够严谨——虽然bool类型(True/False)的type不等于int,但如果用isinstance(a, int)会把bool也识别为int子类,不过这在你的场景里影响不大,但如果要严格判断整数,需要注意这一点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:55:17