子飞鱼 发表于 2023-9-26 14:13:15

请大神看看错误在哪里?

请问下面的代码为什么在抛出异常以后,不能继续执行try对应的代码呢?
class invalidcharError(Exception):
    pass
class NotChinatelError(Exception):
    pass

def register():
    tel = input('请输入您的电话号码:')
    if not tel.isdigit():
      raise invalidcharError
    if not tel.startswith('86'):
      raise NotChinatelError
    return tel
try:
    register()
except invalidcharError:
    print('电话号码不全是数字')
except NotChinatelError:
    print('非中国电话号码')

isdkz 发表于 2023-9-26 14:13:29

在代码中,抛出异常后没有被捕获,因此程序会中止运行。在这种情况下,需要将抛出异常的代码包含在try语句块中,以便在异常抛出时能够被捕获。修改后的代码如下:

class invalidcharError(Exception):
    pass
class NotChinatelError(Exception):
    pass

def register():
    tel = input('请输入您的电话号码:')
    try:
      if not tel.isdigit():
            raise invalidcharError
      if not tel.startswith('86'):
            raise NotChinatelError
    except invalidcharError:
      print('电话号码不全是数字')
    except NotChinatelError:
      print('非中国电话号码')
    return tel

register()

在这个修改后的代码中,当抛出异常时,程序会跳转到对应的except语句块中,然后继续执行try语句块中的代码。

子飞鱼 发表于 2023-9-26 14:18:17

isdkz 发表于 2023-9-26 14:13
在代码中,抛出异常后没有被捕获,因此程序会中止运行。在这种情况下,需要将抛出异常的代码包含在try语句 ...

复制了您的代码,可问题依然存在。

isdkz 发表于 2023-9-26 16:45:44

子飞鱼 发表于 2023-9-26 14:18
复制了您的代码,可问题依然存在。

class invalidcharError(Exception):
    pass
class NotChinatelError(Exception):
    pass

def register():
    tel = input('请输入您的电话号码:')
    if not tel.isdigit():
      raise invalidcharError
    if not tel.startswith('86'):
      raise NotChinatelError
    return tel

while True:
    try:
      register()
      break
    except invalidcharError:
      print('电话号码不全是数字')
    except NotChinatelError:
      print('非中国电话号码')
页: [1]
查看完整版本: 请大神看看错误在哪里?