python 3.6.1格式打印unicode

python 3.6.1格式打印unicode,python,Python,为什么在python 3.6.1中使用以下简单代码: print(f'\xe4') 结果: Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> print(f'\xe4') File "<pyshell#13>", line 1, in <lambda> print = lambda text, end='\n', file

为什么在python 3.6.1中使用以下简单代码:

print(f'\xe4')
结果:

Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    print(f'\xe4')
  File "<pyshell#13>", line 1, in <lambda>
    print = lambda text, end='\n', file=sys.stdout: print(text, end=end, file=file)
  File "<pyshell#13>", line 1, in <lambda>
    print = lambda text, end='\n', file=sys.stdout: print(text, end=end, file=file)
  File "<pyshell#13>", line 1, in <lambda>
    print = lambda text, end='\n', file=sys.stdout: print(text, end=end, file=file)
  [Previous line repeated 990 more times]
RecursionError: maximum recursion depth exceeded
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
打印(f'\xe4')
文件“”,第1行,在
print=lambda text,end='\n',file=sys.stdout:print(text,end=end,file=file)
文件“”,第1行,在
print=lambda text,end='\n',file=sys.stdout:print(text,end=end,file=file)
文件“”,第1行,在
print=lambda text,end='\n',file=sys.stdout:print(text,end=end,file=file)
[上一行重复了990次]
递归错误:超过最大递归深度

对我也适用。但也许它对你有用:

print(chr(0xe4))

让我们回顾一下:您已经用以下内容覆盖了内置的
print
函数:

print = lambda text, end='\n', file=sys.stdout: print(text, end=end, file=file)
这和

def print(text, end='\n', file=sys.stdout):
    print(text, end=end, file=file)
正如您所看到的,这个函数递归地调用自己,但是没有递归基,当它完成时没有条件。最后是一个经典的无限递归示例

这绝对与Unicode或格式无关。不要以内置名称命名函数:

def my_print(text, end='\n', file=sys.stdout):
    print(text, end=end, file=file)

my_print('abc')  # works
或者至少保留对原件的参考:

print_ = print

def print(text, end='\n', file=sys.stdout):
    print_(text, end=end, file=file)

print('abc')  # works as well

注意:如果函数已被覆盖,则必须运行
del print
(或重新启动解释器)才能恢复原始内置项。

可能是Python 3.6.1中的一个错误。在Python3.6.7中运行良好。如果您使用
print=lambda text,end='\n',file=sys.stdout:print(text,end=end,file=file)
覆盖了内置打印,我一点也不奇怪。。。你用一个lambda阴影打印,然后在里面调用print,它调用print,它调用print。。。然后,请提供更多的上下文,以便问题可以重现。它很好地工作。。。OP创建了一个名为
print
的新函数,该函数调用
print
。。。因此递归。。。OPs的其他操作没有什么问题:)看起来OPs几乎是在尝试编写与
my\u print=functools.partial(print,end=\n',file=sys.stdout)
或类似的程序。您不必重新启动解释器。。。您只需使用
del print
删除
lambda
'd版本,然后
print
内置版本将弹出。。。例如<代码>打印=5<代码>打印。。。(整数5)
del print
print
:()@JonClements Partial有点不同,因为您失去了提供非默认参数的能力,尽管我不确定这在这种情况下是否非常有用。我将添加
del
提示,谢谢。不确定您对partial的意思是什么?它只是修复了OP似乎正在做的一些参数,但除此之外,它的调用与原始的完全相同…是的。。。不是建议使用partial进行阴影打印-只是因为它更明显,更容易理解您正在做的事情(例如-修复参数)-当然不会将其绑定回打印以破坏以后的内容:)很好的解释:)