TypeError: end must be None or a string, not KeyboardInterrupt

TypeError: end must be None or a string, not KeyboardInterrupt

如果我按 CTRL+C 它会出错 TypeError: end must be None or a string, not KeyboardInterrupt
为什么?

代码:

import sys
def erroring(a,b,c):
  print(end=b)
sys.excepthook = erroring
while 1:pass

sys.excepthook 需要是一个接受三个参数的函数:类型、异常对象本身和回溯。

正如 John Gordon 在评论中所说,第二个参数 b 将包含异常本身。它说 TypeError: end must be None or a string, not KeyboardInterrupt 的原因是因为存在类型错误,因为 end 必须是 None 或类型 str,而您给它一个 KeyboardInterrupt。它有助于阅读异常,因为它们通常会告诉您问题所在。

我想详细说明他的评论,否则发布答案就没有意义了——你通常不应该使用 print(end = message)。使用 print(message, end = "") - 我没有消息来源说这更好,但是 a) 消息是您正在打印的内容,end 意味着 terminator/separator 默认为换行符在内容 之间,而不是内容本身。 b) 正如您在此处看到的,end 与一般的 print 函数不同,它不能接受任何对象。您可以对任何 x 使用 print(x),即使它不是字符串,但您不能对非字符串使用 end = x

因此,解决此问题的简单方法是:

def erroring(a, b, c):
    print(b, end = "")

(你为什么要 end = ""?另外,你到底想做什么?)