鱼C论坛

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

[已解决]求助:自定义继承列表的类重写remove方法,运行时报错,请问如何解决

[复制链接]
发表于 2020-2-3 10:56:00 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 yexing 于 2020-2-3 11:27 编辑

定义一个继承列表的类,重写remove()方法(汇总了常见报错,并进行中文提示),代码如下:
  1. def Remove(list):
  2.     def __init__(self, *args):
  3.         super().__init__(args)

  4.     def remove(self, *value):
  5.         print("正在调用\".remove()\"方法...")
  6.         if not len(value):
  7.             print("出错啦!要传入一个参数!")
  8.             return
  9.         elif len(value) > 1:
  10.             print("出错啦!最多只能传入一个参数!")
  11.         else:
  12.             if value[0] in self:
  13.                 super().remove(value)
  14.                 print("成功将元素\"%s\"删除啦~" % value)
  15.             else:
  16.                 print("出错啦!传入的元素不存在哦!")
  17.                 return
复制代码

运行过程如下:
  1. >>>a = List(1,2,3,4,5)
  2. >>>a
  3. [1,2,3,4,5]
  4. >>>a.remove(1)
  5. 正在调用".remove()"方法...
  6. Traceback (most recent call last):
  7.   File "<pyshell#0>", line 1, in <module>
  8.     a.remove(1)
  9.   File "C:\测试.py", line 14, in remove
  10.     super().remove(value)
  11. ValueError: list.remove(x): x not in list
复制代码

请问如何修改代码,解决报错问题?
附注:运行时其它报错(比如传入参数错误)均可给予中文提示,只是正确传入参数却报错,问题出在super()函数那块,请问如何修改?
最佳答案
2020-2-3 12:21:56
怎么是 def Remove(list) 呢。。。将第 14 行的 value 改成 value[0]。

  1. class Remove(list):
  2.     def __init__(self, *args):
  3.         super().__init__(args)

  4.     def remove(self, *value):
  5.         print("正在调用".remove()"方法...")
  6.         if not len(value):
  7.             print("出错啦!要传入一个参数!")
  8.             return
  9.         elif len(value) > 1:
  10.             print("出错啦!最多只能传入一个参数!")
  11.         else:
  12.             if value[0] in self:
  13.                 super().remove(value[0])
  14.                 print("成功将元素"%s"删除啦~" % value)
  15.             else:
  16.                 print("出错啦!传入的元素不存在哦!")
  17.                 return
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-3 12:21:56 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

怎么是 def Remove(list) 呢。。。将第 14 行的 value 改成 value[0]。

  1. class Remove(list):
  2.     def __init__(self, *args):
  3.         super().__init__(args)

  4.     def remove(self, *value):
  5.         print("正在调用".remove()"方法...")
  6.         if not len(value):
  7.             print("出错啦!要传入一个参数!")
  8.             return
  9.         elif len(value) > 1:
  10.             print("出错啦!最多只能传入一个参数!")
  11.         else:
  12.             if value[0] in self:
  13.                 super().remove(value[0])
  14.                 print("成功将元素"%s"删除啦~" % value)
  15.             else:
  16.                 print("出错啦!传入的元素不存在哦!")
  17.                 return
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-4 10:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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