python - 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
解决方案
让我们回顾一下:你已经用这个覆盖了内置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
(或重新启动解释器)才能取回原始内置函数。
推荐阅读
- apache-kafka - Kafka在写入接收器数据库之前连接主题消息修改
- python - Matplotlib 图在尝试关闭时停止响应
- string - 如何使用 HELM-3 值多行字符串
- angular - 应该如何编写或实现此接口以避免目标仅允许 1 的 TS2322 错误
- flutter - 将 Flutter 的 MaterialApp 放入 Container
- ruby-on-rails - Rails - 范围和多对多关系
- html - 如何将数据库建模为动态 HTML 表单?
- python - 取字符串数字列表的最大值
- roomle - 不应显示价格
- php - 在 WooCommerce 购物车中购买一个、折扣另一个产品的问题