python为什么调用_str而不是_repr_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

python为什么调用_str而不是_repr_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,python,string,class,call,repr,Python,String,Class,Call,Repr,我有一个小问题,因为每当我在try/except部分运行代码打印(obj)时,它都会抛出一个异常。我使用调试工具跟踪它,它在str方法中跳转,但我对str方法进行编码只是为了测试。通常我认为它会跳转到正常类调用的repr方法中。 代码在str()方法的return命令中向右断开。 我只是想更改time.time_struct类的输出,因为我需要字符串和属性表示。 print命令仅用于显示结果,init语句中的块起作用,而try/Except块则不起作用。 有人有主意吗 import time

我有一个小问题,因为每当我在try/except部分运行代码打印(obj)时,它都会抛出一个异常。我使用调试工具跟踪它,它在str方法中跳转,但我对str方法进行编码只是为了测试。通常我认为它会跳转到正常类调用的repr方法中。 代码在str()方法的return命令中向右断开。 我只是想更改time.time_struct类的输出,因为我需要字符串和属性表示。 print命令仅用于显示结果,init语句中的块起作用,而try/Except块则不起作用。 有人有主意吗

import time

class timeSelf():

def __init__(self,str):
    self.obj = time.strptime(str, "%H:%M")
    print(self.obj.tm_hour)
    print(type(self.obj))
def __repr__(self):
    return "" + self.obj.tm_hour + ":" + self.obj.tm_min

def __str__(self):
    return "" + self.obj.tm_hour + ":" + self.obj.tm_min

if __name__ == "__main__":
str= "16:54"
try:
    obj = timeSelf(str)
    print(obj)
    print(type(obj))
    print(type(obj.tm_hour))
except Exception:
    print("stuff happened")
    pass

如果您没有捕获到异常(或者如果您重新引发它以查看捕获到的异常),您将看到问题出在
\uuu str\uuu
\uu repr\uu
的定义上。您正试图将
int
值与
+
组合在一起,并且不会自动将
int
转换为
str

Traceback (most recent call last):
  File "tmp.py", line 19, in <module>
    print(obj)
  File "tmp.py", line 13, in __str__
    return "" + self.obj.tm_hour + ":" + self.obj.tm_min
TypeError: can only concatenate str (not "int") to str
或者更简单地说:

return f"{self.obj.tm_hour}:{self.obj.tm_min}"

f-strings会根据需要调用
\uuuu str\uuuu
,将
{…}
中的值转换为
str

如果您没有捕获异常(或者如果您引发异常以查看捕获的内容),您会发现问题在于
\uu str\uuu
\uu repr\ucode>的定义。您正试图将
int
值与
+
组合在一起,并且不会自动将
int
转换为
str

Traceback (most recent call last):
  File "tmp.py", line 19, in <module>
    print(obj)
  File "tmp.py", line 13, in __str__
    return "" + self.obj.tm_hour + ":" + self.obj.tm_min
TypeError: can only concatenate str (not "int") to str
或者更简单地说:

return f"{self.obj.tm_hour}:{self.obj.tm_min}"

f-strings会根据需要调用
\uuuu str\uuuu
,将
{…}
中的值转换为
str

print
调用
str
,而不是
repr
。如果您的代码引发异常,如果您不知道是什么原因,请不要忽略它。非常感谢
print
调用
str
,而不是
repr
。如果您的代码引发异常,如果您不知道是什么原因导致的,请不要忽略它。非常感谢!需要注意的是:
“+…
是毫无意义的。在任何东西前面加上空字符串都不会……什么都不会。注意:
“+…
是毫无意义的。用空字符串作为任何东西的前缀都不会……什么都不会。