鱼C论坛

 找回密码
 立即注册
查看: 769|回复: 1

[已解决]新人疑惑:触发异常

[复制链接]
发表于 2020-6-11 08:00:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引用类生成对象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 [1,2,3,4,5,6,7]
            adult >= 0
            child >= 0
        except IndexError:#为什么不会报错
            print('参数无效!')
        else:
            if week in [1,2,3,4,5]:
                return self.aday * adult + self.cday * child
            if week in [6,7]:
                return self.aend * adult + self.cend * child
            
最佳答案
2020-6-11 08:16:42
本帖最后由 Twilight6 于 2020-6-11 08:50 编辑


这样的输入并不会报错,这是正确的语法结构
你在IDLE界面直接调用这样的代码会返回True 或者False,这里也是同样的,返回True 或 Flase
  1. week in [1, 2, 3, 4, 5, 6, 7]
  2. adult >= 0
  3. child >= 0
复制代码


而且你捕获的是 IndexError ,是索引超出长度才会报错,你应该改成
  1. temp[week-1]
复制代码

这样你输入除小于等于0的数以外 大于7 的数 都会被捕获异常

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

  1. class Ticket:
  2.     aday = 100
  3.     aend = aday * 1.2
  4.     cday = aday / 2
  5.     cend = aend / 2

  6.     def cost(self):
  7.         try:
  8.             week = int(input('请输入星期几(以1234567依次对应):'))
  9.             adult = int(input('成人游客人数:'))
  10.             child = int(input('儿童游客人数:'))
  11.             if week not in [1, 2, 3, 4, 5, 6, 7] or adult < 0 or child <0:
  12.                 raise ValueError
  13.         except ValueError:
  14.             print('错误:参数无效!')
  15.         else:
  16.             if week in [1, 2, 3, 4, 5]:
  17.                 return self.aday * adult + self.cday * child
  18.             if week in [6, 7]:
  19.                 return self.aend * adult + self.cend * child


  20. a = Ticket()
  21. a.cost()
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-11 08:16:42 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-6-11 08:50 编辑


这样的输入并不会报错,这是正确的语法结构
你在IDLE界面直接调用这样的代码会返回True 或者False,这里也是同样的,返回True 或 Flase
  1. week in [1, 2, 3, 4, 5, 6, 7]
  2. adult >= 0
  3. child >= 0
复制代码


而且你捕获的是 IndexError ,是索引超出长度才会报错,你应该改成
  1. temp[week-1]
复制代码

这样你输入除小于等于0的数以外 大于7 的数 都会被捕获异常

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

  1. class Ticket:
  2.     aday = 100
  3.     aend = aday * 1.2
  4.     cday = aday / 2
  5.     cend = aend / 2

  6.     def cost(self):
  7.         try:
  8.             week = int(input('请输入星期几(以1234567依次对应):'))
  9.             adult = int(input('成人游客人数:'))
  10.             child = int(input('儿童游客人数:'))
  11.             if week not in [1, 2, 3, 4, 5, 6, 7] or adult < 0 or child <0:
  12.                 raise ValueError
  13.         except ValueError:
  14.             print('错误:参数无效!')
  15.         else:
  16.             if week in [1, 2, 3, 4, 5]:
  17.                 return self.aday * adult + self.cday * child
  18.             if week in [6, 7]:
  19.                 return self.aend * adult + self.cend * child


  20. a = Ticket()
  21. a.cost()
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表