为什么print("..."),也就是三个点连续出现会打印空格?

63

我想要在一行上打印三个点(形成省略号),但是print()会打印空白。

print("one moment...")
one moment...
print("...")

print("..")
..
print("...abc...")
abc...
print("\u2026")
…

这里发生了什么?为什么"..."被异常地解析了?

我正在PyCharm中使用ipython。


2
啊,这是我在想的另一个问题! - Ture Pålsson
3
有时会出现另外一个问题,虽然这次似乎没有,但仍有可能值得一提,那就是字符集诡异和“智能”省略号(U+2026)。当与任何去除高字符的东西相结合时,这将变得十分有趣。在CP-1252中,裸露的会变成…,在7位ASCII中则可能为空。"…".encode('utf8').decode('ascii', errors='ignore') == "" - TLW
1
这不是答案也不是解决方案,但如果你真的想要省略号,你可以从键盘上生成一个真正的省略号。在 Mac 上,它是 opt-;,而在 Windows 上,它是 alt-0133,数字位于数字键盘上。 - Manngo
我在我的Mac上使用PyCharm,并尝试了print('… watch this space …')print('... watch this space ...')。两者都可以完美地打印。使用的是2021.3.1(社区版)。 - Manngo
@Manngo 是的,那个方法可行,但你尝试过在PyCharm中使用IPython吗? - P2000
1个回答

69

看起来这是Pycharm已知的问题,即其交互式控制台会删除print语句中前面的三个点号。 这里是跟踪此问题的工单


现在可以尝试定义类似以下内容的代码作为解决方法:

def iprint(obj):
    if (s:=str(obj)).startswith("..."):
        print(" "+s)
    else:
        print(s)

看起来像这样:

>>> iprint("...ymmv")
 ...ymmv

13
@P2000最初于2018年报告!看起来他们现在应该已经解决了这个问题,也许一个临时的解决办法是编写一个自定义打印函数,仅检查str(x).startswith(“…”),如果为真,则添加换行符或其他内容。 - 0x263A
6
“似乎他们应该已经修复了这个问题。” - 你会这么想吧?我也是。但我一直遇到在Pycharm中未修复的老漏洞,例如:它仍然不能识别functools.partialmethod()的结果是否可调用,而且已经六年了 - Aaron F
3
@AaronF 我也不太理解。它是一款超级集成开发环境,如果他们在接下来的12个月中把<20%的精力放在新功能上,而把>80%的精力放在修复Bug上,我会非常高兴。 - P2000
也许他们用省略号解释覆盖了它。 - David Kariuki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接