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

标签 python python-2.6 python-2.x

(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()在某些情况下(例如,如果未设置 LANG),可以返回 None。因此,回退到“utf-8”可能会更安全一些,以允许这种(不太可能)的可能性:

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

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

关于python - 在 Python 2 中安全导入具有 Unicode 名称的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999307/

相关文章:

用于检查 rpm 的 Python 是更高版本

python - 将 Python 循环方法转换为嵌套循环

Python str View

python - Python 2.X 中的 range 和 xrange 函数有什么区别?

python数据抓取改变货币

Python 不可变类型 ids 和 is 语句

python - 如何解压函数返回的元组?

python - 使用 TypedChoiceField 的 FormSet 不会每 ~2000 个请求强制转换为 int

python - 如何在显示文本的同时在 Python 2.6.6 中播放音频?

基于 Python 标准的动态函数添加到类中