首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

#sys

k8s环境缺少cpu.weight?

大神帮看一下?

为什么我们不应该在py脚本中使用sys.setdefaultencode(“utf-8”)?

萧雨牧歌潜行者
TL;DR 答案是绝不可能(除非你真的知道自己在做什么) 9/10倍的解决方案可以通过正确理解编码/解码来解决。 1/10人有错误定义的地点或环境,需要设置: PYTHONIOENCODING="UTF-8" 在他们的环境中修复控制台打印问题。 是干什么的呢? sys.setdefaultencoding("utf-8")(为了避免重复使用)每当Python2.x需要将Unicode()转换为str()(反之亦然)时,就会更改默认的编码/解码,并且不会给出编码。即: str(u"\u20AC") unicode("€") "{}".format(u"\u20AC") 在Python2.x中,默认编码设置为ASCII,上述示例将失败: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) (我的控制台配置为UTF-8,所以"€" = '\xe2\x82\xac',因此在\xe2) 或 UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) sys.setdefaultencoding("utf-8")将允许这些工作我,但不一定适用于不使用UTF-8的人。asci的默认设置确保编码的假设不被写入代码中。 控制台 sys.setdefaultencoding("utf-8")也有一个副作用,似乎修复sys.stdout.encoding,当将字符打印到控制台时使用。Python使用用户的地区(Linux/OSX/un)*(X)或代码页(Windows)设置此值。偶尔,用户的区域设置会中断,只需要PYTHONIOENCODING若要修复控制台编码。 例子: $ export LANG=en_GB.gibberish $ python >>> import sys >>> sys.stdout.encoding 'ANSI_X3.4-1968' >>> print u"\u20AC" Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) >>> exit() $ PYTHONIOENCODING=UTF-8 python >>> import sys >>> sys.stdout.encoding 'UTF-8' >>> print u"\u20AC" € 有什么不好的sys.setdefaultencode(“utf-8”)? 16年来,人们一直在使用Python2.x进行开发,人们的理解是默认的编码是ASCII。UnicodeError已经编写了异常处理方法来处理字符串到Unicode的转换,这些字符串被发现包含非ASCII。 def welcome_message(byte_string): try: return u"%s runs your business" % byte_string except UnicodeError: return u"%s runs your business" % unicode(byte_string, encoding=detect_encoding(byte_string)) print(welcome_message(u"Angstrom (Å®)".encode("latin-1")) 在设置默认编码之前,这段代码将无法解码ascii编码中的“oi”,然后输入异常处理程序来猜测编码并正确地将其转换为Unicode。印刷:Angstrom。®经营你的生意。一旦将默认编码设置为utf-8,代码将发现字节_字符串可以被解释为utf-8,因此它会损坏数据并返回以下内容:Angstrom(Ů)运行您的业务... 展开详请
TL;DR 答案是绝不可能(除非你真的知道自己在做什么) 9/10倍的解决方案可以通过正确理解编码/解码来解决。 1/10人有错误定义的地点或环境,需要设置: PYTHONIOENCODING="UTF-8" 在他们的环境中修复控制台打印问题。 是干什么的呢? sys.setdefaultencoding("utf-8")(为了避免重复使用)每当Python2.x需要将Unicode()转换为str()(反之亦然)时,就会更改默认的编码/解码,并且不会给出编码。即: str(u"\u20AC") unicode("€") "{}".format(u"\u20AC") 在Python2.x中,默认编码设置为ASCII,上述示例将失败: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 0: ordinal not in range(128) (我的控制台配置为UTF-8,所以"€" = '\xe2\x82\xac',因此在\xe2) 或 UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) sys.setdefaultencoding("utf-8")将允许这些工作我,但不一定适用于不使用UTF-8的人。asci的默认设置确保编码的假设不被写入代码中。 控制台 sys.setdefaultencoding("utf-8")也有一个副作用,似乎修复sys.stdout.encoding,当将字符打印到控制台时使用。Python使用用户的地区(Linux/OSX/un)*(X)或代码页(Windows)设置此值。偶尔,用户的区域设置会中断,只需要PYTHONIOENCODING若要修复控制台编码。 例子: $ export LANG=en_GB.gibberish $ python >>> import sys >>> sys.stdout.encoding 'ANSI_X3.4-1968' >>> print u"\u20AC" Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 0: ordinal not in range(128) >>> exit() $ PYTHONIOENCODING=UTF-8 python >>> import sys >>> sys.stdout.encoding 'UTF-8' >>> print u"\u20AC" € 有什么不好的sys.setdefaultencode(“utf-8”)? 16年来,人们一直在使用Python2.x进行开发,人们的理解是默认的编码是ASCII。UnicodeError已经编写了异常处理方法来处理字符串到Unicode的转换,这些字符串被发现包含非ASCII。 def welcome_message(byte_string): try: return u"%s runs your business" % byte_string except UnicodeError: return u"%s runs your business" % unicode(byte_string, encoding=detect_encoding(byte_string)) print(welcome_message(u"Angstrom (Å®)".encode("latin-1")) 在设置默认编码之前,这段代码将无法解码ascii编码中的“oi”,然后输入异常处理程序来猜测编码并正确地将其转换为Unicode。印刷:Angstrom。®经营你的生意。一旦将默认编码设置为utf-8,代码将发现字节_字符串可以被解释为utf-8,因此它会损坏数据并返回以下内容:Angstrom(Ů)运行您的业务

禁用输出缓冲?

是的。 你可以通过“-u”开关在命令行上禁用它。 或者,你可以在每次写入时在sys.stdout上调用.flush()(或者用自动执行此操作的对象包装它)... 展开详请
领券