引发错误与返回False python3

dic*_*arl 2 python return raise try-except

嗨我最近开始在python中编码,我想知道如何处理错误.我做了教程diveintopython并在那里他使用加注错误来提供错误的反馈.在这里我的情况:我有一个函数,它检查一个字符串,代表一个数字,是7或8位长和其他一些东西

def checkNumber( someNumber ):
  ''' checks if Number is valid '''
  someNumber = str(someNumber);
  if not 6 < len(someNumber) < 9:
     raise ValueError('number must be either 7 or 8')
  if not re.search('^[0-9]{7,8}$', someNumber):
     raise ValueError('only digits from 0...9')
  sum = 0
  if len(pzn) == 7: someNumber = '0' + someNumber
  for n, a in list(enumerate(someNumber[:-1], start=1)):
     sum += int(a)*n
  if someNumber[-1]==str(sum%11):
     return someNumber
  else:   
     raise ValueError('not a vaild code')
Run Code Online (Sandbox Code Playgroud)

我独立使用此功能,但我也会从另一个函数调用它,它扫描条形码并调用此函数来验证代码.因此,如果扫描号码是正确的,它应该继续,如果不是,它应该继续扫描.像我这样做更好,并在扫描仪功能中放置一个try/except块,或者我应该返回一个False

非常感谢

Mar*_*ers 7

提出异常更好,这就是异常.

此外,返回False需要你的代码来处理测试之间的差异0False.突然你需要测试函数的返回值.

你的功能似乎确实遭受了分裂的个性.一方面,您将其命名checkNumber,并且您的文档声称它正在检查该号码是否有效.另一方面,它正在转换,改变该数字,将其转换为字符串,0如果pzn全局长度为7 ,则甚至在其前面添加一个数字.

如果您的所有函数都在测试数字是否有效,那么返回布尔值是有意义的.然后,使用异常可以为您提供有关验证失败性质的更多信息,但如果您不需要该信息,则布尔值就足够了.

但是,如果您还需要将数字转换为不同的类型和格式,则需要重命名函数,然后验证错误实际上是正常行为的异常.然后期望函数返回转换后的值,并且无效输入应该引发异常以指示由于输入中的某些错误而无法返回正常值.