Python 正在重写添加,尝试super()时未捕获异常__ 我试图把大熊猫的时间增量< /代码>子类,因此当它被整数/浮点相加时,我们认为它是“代码>时间增量< /代码>秒。

Python 正在重写添加,尝试super()时未捕获异常__ 我试图把大熊猫的时间增量< /代码>子类,因此当它被整数/浮点相加时,我们认为它是“代码>时间增量< /代码>秒。,python,inheritance,add,timedelta,Python,Inheritance,Add,Timedelta,我尝试了以下方法: class Timedelta(pd.Timedelta): def __add__(self, other): print("OVERRIDEN ADD") try: print("SUPER ADD") return super().__add__(other) except: print("NEW ADD") retur

我尝试了以下方法:

class Timedelta(pd.Timedelta):
    def __add__(self, other):
        print("OVERRIDEN ADD")
        try:
            print("SUPER ADD")
            return super().__add__(other)
        except:
            print("NEW ADD")
            return super().__add__(Timedelta(str(other)+"s"))
但由于某些原因,我无法将其转到
“新添加”
实现:

>>> a = Timedelta2('10s')
>>> a+1
OVERRIDEN ADD
Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\IPython\core\interactiveshell.py", line 2910, in run_code
SUPER ADD
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-51-98b939904c8e>", line 1, in <module>
    a+1
TypeError: unsupported operand type(s) for +: 'Timedelta2' and 'int'
>a=Timedelta2('10s')
>>>a+1
覆盖添加
回溯(最近一次呼叫最后一次):
文件“C:\Python36\lib\site packages\IPython\core\interactiveshell.py”,第2910行,运行代码
超级添加
exec(代码对象、self.user\u全局、self.user\n)
文件“”,第1行,在
a+1
TypeError:不支持+:“Timedelta2”和“int”的操作数类型
我本来希望捕获这个
TypeError
异常,但由于某些原因,它没有被捕获,因此我想寻求一些帮助,以了解这里可能发生的情况

谢谢

super()。\uuuu add\uuuuu(其他)
不会引发异常!它返回
NotImplemented
。这就是你发出的信号,你的操作符重载不理解它得到的论点。
TypeError
来自操作员机器,一旦双方都表示无法执行操作

不要试图捕获一个无论如何都不会从那里产生的异常,而是检查
super()。\uuuu add\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!它返回
NotImplemented
。这就是你发出的信号,你的操作符重载不理解它得到的论点。
TypeError
来自操作员机器,一旦双方都表示无法执行操作


与其试图捕获一个无论如何都不会出现的异常,不如检查
super()。\uuuu add\uuuuu(其他)
是否返回
NotImplemented
您还没有真正理解
\uuu add\uuuuu
方法!尝试下面的方法来达到你的期望<代码>尝试。。。expect
无效,因此如果。。否则

import pandas as pd

class MyTimedelta(pd.Timedelta):
    def __add__(self, other):
        print("OVERRIDEN ADD")
        if isinstance(other, int):
            return pd.Timedelta("{}s".format(int(self.seconds)+ other))
        else:    
            super(MyTimedelta, self).__add__(other)
然后您可以执行如下操作:

In [22]: s=MyTimedelta('2s')

In [23]: s+3
OVERRIDEN ADD
Out[23]: Timedelta('0 days 00:00:05')

您不是真正了解
\uuuu添加\uuuu
方法!尝试下面的方法来达到你的期望<代码>尝试。。。expect无效,因此如果。。否则

import pandas as pd

class MyTimedelta(pd.Timedelta):
    def __add__(self, other):
        print("OVERRIDEN ADD")
        if isinstance(other, int):
            return pd.Timedelta("{}s".format(int(self.seconds)+ other))
        else:    
            super(MyTimedelta, self).__add__(other)
然后您可以执行如下操作:

In [22]: s=MyTimedelta('2s')

In [23]: s+3
OVERRIDEN ADD
Out[23]: Timedelta('0 days 00:00:05')

你是什么意思?
试试。。。除了
没有效率?它比每次检查值的类型要有效得多。相关问题:你是什么意思。。。除了没有效率?它比每次检查值的类型要有效得多。请尝试。有关问题: