python 2、3、os.environ 和 unicode

Jel*_*lby 3 python unicode python-3.x

我可以编写此代码以与 python 2.x 和 3.x 一起使用,而无需对它们进行显式测试吗?

\n\n
# -*- coding: utf-8 -*-\nfrom __future__ import (unicode_literals, division, absolute_import, print_function)\n\nimport os\nimport sys\n\nif (sys.version_info[0] > 2):\n  # python 3.x\n  os.environ['foo'] = 'b\xc3\xa1r'\n  print(os.environ['foo'])\nelse:\n  # python 2.x\n  os.environ['foo'] = 'b\xc3\xa1r'.encode('utf8')\n  print(os.environ['foo'].decode('utf8'))\n
Run Code Online (Sandbox Code Playgroud)\n

Mar*_*ers 5

设置时,可以使用异常处理;在 Python 2 上尝试将环境变量设置为unicode对象会引发异常:

\n\n
try:\n    # Python 3\n    os.environ['foo'] = 'b\xc3\xa1r'\nexcept UnicodeEncodeError:\n    # Python 2\n    os.environ['foo'] = 'b\xc3\xa1r'.encode('utf8')\n
Run Code Online (Sandbox Code Playgroud)\n\n

获取时,尝试使用decode方法;在 Python 3 中它会失败并出现属性错误:

\n\n
try:\n    # Python 2\n    print(os.environ['foo'].decode('utf8'))\nexcept AttributeError:\n    # Python 3\n    print(os.environ['foo'])\n
Run Code Online (Sandbox Code Playgroud)\n