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 = ""
?另外,你到底想做什么?)
如果我按 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 = ""
?另外,你到底想做什么?)