class MyException(Exception):
def __str__(self):
return self.args[0]
def DoWork():
raise MyException("My hoverboard is full of eels")
pass
if __name__ == '__main__':
try:
DoWork()
except MyException as ex:
print("This will get printed: " + str(ex)) #Line1
print("This will not get printed and will raise exception: " + ex) #Line2
为什么异常需要第1行中的显式转换。理想情况下,它应该如Line2中所示那样工作。 注意:我已经尝试过两种方法 - 从MyException类中删除 str 并添加 str ;他们都没有工作。 请帮忙。
答案 0 :(得分:2)
您必须将其转换为字符串,因为x + y
最终会调用x.__add__(y)
,所以当x
是一个字符串时,您调用str.__add__
,它在两个字符串上运行,不是字符串和异常。 Python的内置运算符和类型通常不会自动尝试强制事物成为正确的类型(例如javascript),你必须明确。这与在int()
中使用x = 1 + int("12")
无异,例如。
请注意,如果您不想使用str()
,则可以使用%
格式:
print("This will also work: %s" % ex)