-1
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 行中进行显式转换。理想情况下,它应该如第 2 行所示工作。注意:我已经尝试过 -从 MyException 类中删除str并添加str;他们都没有工作。请帮忙。

4

1 回答 1

2

您必须将其转换为字符串,因为x + y最终会调用x.__add__(y),因此您调用的字符串何时xstr.__add__,它对两个字符串进行操作,而不是对字符串和异常进行操作。Python 的内置运算符和类型通常不会自动尝试将事物强制为正确的类型(例如 javascript),您必须明确。例如,这与必须使用int()in没有什么不同x = 1 + int("12")

请注意,如果您不想使用str(),可以使用%格式:

print("This will also work: %s" % ex)
于 2012-09-29T06:59:26.220 回答