Python3:为什么在打印消息时异常需要显式转换

时间:2012-09-29 06:47:57

标签: python-3.x

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 ;他们都没有工作。 请帮忙。

1 个答案:

答案 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)