首页 > 解决方案 > python 3.6.1格式打印unicode

问题描述

为什么在 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

标签: python

解决方案


让我们回顾一下:你已经用这个覆盖了内置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(或重新启动解释器)才能取回原始内置函数。


推荐阅读