Kornfielder 发表于 2020-6-11 08:00:54

新人疑惑:触发异常

引用类生成对象a
a使用cost方法
输入数据范围不在try规定的范围内
只是不显示结果
为什么不会触发异常
代码如下:

class Ticket:
    aday = 100
    aend = aday * 1.2
    cday = aday / 2
    cend = aend / 2
   

    def cost(self):
      week = int(input('请输入星期几(以1234567依次对应):'))
      adult = int(input('成人游客人数:'))
      child = int(input('儿童游客人数:'))
      try:
            week in
            adult >= 0
            child >= 0
      except IndexError:#为什么不会报错
            print('参数无效!')
      else:
            if week in :
                return self.aday * adult + self.cday * child
            if week in :
                return self.aend * adult + self.cend * child
            

Twilight6 发表于 2020-6-11 08:16:42

本帖最后由 Twilight6 于 2020-6-11 08:50 编辑


这样的输入并不会报错,这是正确的语法结构
你在IDLE界面直接调用这样的代码会返回True 或者False,这里也是同样的,返回True 或 Flase
week in
adult >= 0
child >= 0

而且你捕获的是 IndexError ,是索引超出长度才会报错,你应该改成
temp
这样你输入除小于等于0的数以外 大于7 的数 都会被捕获异常

建议这里还是写好if条件用 raise 产生个错误比较好
这里try 写在 上面是防止 week adult child 输入的不是数字,捕获 ValueError:

class Ticket:
    aday = 100
    aend = aday * 1.2
    cday = aday / 2
    cend = aend / 2

    def cost(self):
      try:
            week = int(input('请输入星期几(以1234567依次对应):'))
            adult = int(input('成人游客人数:'))
            child = int(input('儿童游客人数:'))
            if week not in or adult < 0 or child <0:
                raise ValueError
      except ValueError:
            print('错误:参数无效!')
      else:
            if week in :
                return self.aday * adult + self.cday * child
            if week in :
                return self.aend * adult + self.cend * child


a = Ticket()
a.cost()

页: [1]
查看完整版本: 新人疑惑:触发异常