Linux 上的 Python 模块 win32com

Blu*_*rin 4 python multiplatform python-import

我正在编写一些在多个平台下运行的 Python 代码。不幸的是在Win32下,我必须支持一些COM功能。

然而,这些行在 Linux 环境下会失败:

from pythoncom import PumpWaitingMessages
from pythoncom import Empty
from pythoncom import Missing
from pythoncom import com_error
import win32api
Run Code Online (Sandbox Code Playgroud)

所有其他使用 Win32 COM API 的函数也将失败。确保某些代码未根据平台加载/导入并在接口的客户端调用它们时给出错误消息/异常的标准方法是什么?

unu*_*tbu 5

用一个try..except ImportError

try:
    from pythoncom import PumpWaitingMessages
    from pythoncom import Empty
    from pythoncom import Missing
    from pythoncom import com_error
    import win32api
except ImportError:
    # handle exception
Run Code Online (Sandbox Code Playgroud)

出现异常时该怎么办取决于您。您可以添加提供类似接口的 Linux 特定代码,或者您可以使用该warnings模块告诉用户某些功能/特性不可用。


或者,您可以使用if-statement基于以下值的sys.platform

import sys
if sys.platform == "win32":
    ...
elif sys.platform == 'cygwin':
    ...
elif sys.platform[:5] == 'linux':
    ...
elif sys.platform == 'darwin':
    ...
else:
    ...
Run Code Online (Sandbox Code Playgroud)

对于跨平台代码可能很重要的其他值可能是os.name(可能等于'posix', 'nt', 'os2', 'ce', 'java', 'riscos')或platform.architecture(可能等于('32bit', 'ELF').)

  • 这解决了导入问题,但是使用导入的函数仍然会失败,不是吗? (2认同)
  • Windows 特定的函数应放置在“try-suite”内。Linux 特定的类似函数应放置在“ except-suite”中。 (2认同)