python 为什么它调用 __str__ 而不是 __repr__ 以及为什么 print(obj) 不工作并抛出异常
python why does it call __str__ instead of __repr__ and why is the print(obj) not working and throws exception
我有一个小问题,因为每当我 运行 try/except 部分中的代码 print(obj) 时,它都会抛出异常。我用调试工具跟踪它,它直接跳转到 str 方法,但我编码 str 方法只是为了测试。通常我认为它会跳入正常 class 调用的 repr 方法。
代码在 str() 方法的 return 命令中中断。
我只是想更改 time.time_struct class 的输出,因为我需要字符串和属性表示。
打印命令仅用于显示结果,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
如果您没有捕捉到异常(或者如果您重新引发它以查看您 捕捉到了什么 ),您会发现问题出在您对 __str__
和 __repr__
。您正在尝试将 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 "" + str(self.obj.tm_hour) + ":" + str(self.obj.tm_min)
或更简单地说:
return f"{self.obj.tm_hour}:{self.obj.tm_min}"
f-strings do 根据需要调用 __str__
将 {...}
中的值转换为 str
.
我有一个小问题,因为每当我 运行 try/except 部分中的代码 print(obj) 时,它都会抛出异常。我用调试工具跟踪它,它直接跳转到 str 方法,但我编码 str 方法只是为了测试。通常我认为它会跳入正常 class 调用的 repr 方法。 代码在 str() 方法的 return 命令中中断。 我只是想更改 time.time_struct class 的输出,因为我需要字符串和属性表示。 打印命令仅用于显示结果,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
如果您没有捕捉到异常(或者如果您重新引发它以查看您 捕捉到了什么 ),您会发现问题出在您对 __str__
和 __repr__
。您正在尝试将 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 "" + str(self.obj.tm_hour) + ":" + str(self.obj.tm_min)
或更简单地说:
return f"{self.obj.tm_hour}:{self.obj.tm_min}"
f-strings do 根据需要调用 __str__
将 {...}
中的值转换为 str
.