在 Python 2 中安全导入具有 Unicode 名称的模块

Safely Importing Modules With Unicode Names in Python 2

(Python 2.6)

我有一些代码可以根据客户端名称进行一些自定义。

它做这样的事情:

custom_module = __import__("some.module.company_inc")

只要我们的客户有纯 ascii 名称,这就可以正常工作。

我也想让这段代码对非 ascii 公司名称也能正常工作,例如

custom_module = __import__(u"some.module.unicóde_company_inc")

然而,__import__只接受字节,所以我需要先对其进行编码。

__import__(u"some.module.unicóde_company_inc".encode(sys.getfilesystemencoding()) 是否保证在所有系统上都能正常工作(当然假设文件系统编码支持“ó”)?这是正确的方法吗? (假设我不知道盒子使用的编码)

我对 linux 系统最感兴趣。 (但也很高兴知道非 linux)

严格来说,在某些情况下sys.getfilesystemencoding()可以return None(例如,如果LANG未设置)。因此,回退到 "utf-8" 以允许这种(不太可能的)可能性可能会稍微安全一些:

    encoding = sys.getfilesystemencoding() or 'utf-8'

这将涵盖 99.9% 的情况。对于其余部分,我只允许应用程序引发异常(因为这正是它的本质),然后通过适当的信息错误消息优雅地退出。