即使在上面的行中直接无条件分配了NameError

and*_*hua 4 python unicode

请向我解释一下这是怎么可能的:

?har = input()
print(char)
Run Code Online (Sandbox Code Playgroud)

追溯(最近一次通话最近):文件“ test.py”,行2(在print(char)中)NameError:未定义名称“ char”

为了使事情变得更有趣,请考虑使用经过仔细检查的python版本在repl.it中运行该代码:

import sys
print(f'Python version on this machine:\n{sys.version}')
?har = input()
print(char) 
Run Code Online (Sandbox Code Playgroud)

此计算机上的Python版本:
3.7.4(默认值,2019年7月13日14:20:24)
[GCC 6.3.0 20170516]
键入任何
回溯(最近一次调用为last):
文件“ main.py”,第5行,在
print(char)
NameError:名称“ char”未定义

wim*_*wim 11

Unicode标识符名称。

>>> "char" == "?har" 
False
Run Code Online (Sandbox Code Playgroud)

一个与C是香草“拉丁小写字母C”而另一种是chr(0x441),即“CYRI​​LLIC小写字母ES”。在典型的机器上,它们将以非常相似(或完全相同)的字形渲染到终端。

  • @wim您怎么能这么快地发现问题?您使用的字体不具有相同的字形,还是您以前看过? (5认同)
  • 我以前也见过类似的小技巧。在chrome浏览器中,您可以按ctrl + f并输入c,您会注意到问题中的一个c不在页面上“突出显示”。 (4认同)
  • @StardustGogeta您正在输入它,还是正在复制粘贴? (2认同)

Mar*_*k G 7

char = input()包含西里尔字母吗?(请参阅此处)而print(char)纯粹是拉丁语。

这也让我想起了希腊问号prank,其中分号和问号的字符几乎相同:?;

编辑:wim更快