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

时间:2015-10-07 18:00:44

标签: python python-2.6 python-2.x

(Python 2.6)

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

它的确是这样的:

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

只要我们的客户拥有ascii-only名称,这种方法就可以正常工作。

我想使这段代码也适用于非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也很高兴知道)

1 个答案:

答案 0 :(得分:1)

严格地说,sys.getfilesystemencoding()可能会在某些情况下返回None(例如,如果未设置LANG)。所以回退到“utf-8”以允许这种(相当不可能的)可能性可能会稍微安全一些:

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

这将覆盖99.9%的案件。对于其余的,我只是允许应用程序引发一个异常(因为它正是它),然后使用适当的信息性错误消息进行优雅的拯救。