为何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
相关产品推荐
相关产品推荐

