欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python中使用异常处理来判断运行的操作系统平台方法

程序员文章站 2022-07-21 23:14:42
代码实例: 复制代码 代码如下: try:     import termios, termios               1 e...

代码实例:

复制代码 代码如下:

try:
    import termios, termios               1
except importerror:
    try:
        import msvcrt                  2
    except importerror:
        try:
            from easydialogs import askpassword   3
        except importerror:
            getpass = "default_getpass"        4
        else:
            getpass = "askpassword"          5
    else:
        getpass = "win_getpass"
else:
    getpass = "unix_getpass"

1:termios 是 unix 独有的一个模块,它提供了对于输入终端的底层控制。如果这个模块无效 (因为它不在你的系统上,或你的系统不支持它),则导入失败,python 引发我们捕捉的 importerror 异常。

2:ok,我们没有 termios,所以让我们试试 msvcrt,它是 windows 独有的一个模块,可以提供在 microsoft visual c++ 运行服务中的许多有用的函数的一个api。如果导入失败,python 会引发我们捕捉的 importerror 异常。

3:如果前两个不能工作,我们试着从 easydialogs 导入一个函数,它是 mac os 独有的一个模块,提供了各种各样类型的弹出对话框。再一次,如果导入失败,python 会引发一个我们捕捉的 importerror 异常。

4:这些平台特定的模块没有一个有效 (有可能,因为 python 已经移植到了许多不同的平台上了),所以我们需要回头使用一个缺省口令输入函数 (这个函数定义在 getpass 模块中的别的地方)。注意我们在这里所做的:我们将函数 default_getpass 赋给变量 getpass。如果你读了官方 getpass 文档,它会告诉你 getpass 模块定义了一个 getpass 函数。它是这样做的:通过绑定 getpass 到正确的函数来适应你的平台。然后当你调用 getpass 函数时,你实际上调用了平台特定的函数,是这段代码已经为你设置好的。你不需要知道或关心你的代码正运行在何种平台上;只要调用 getpass,则它总能正确处理。

5:一个 try...except 块可以有一条 else 子句,就像 if 语句。如果在 try 块中没有异常引发,然后 else 子句被执行。在本例中,那就意味着如果 from easydialogs import askpassword 导入可工作,所以我们应该绑定 getpass 到 askpassword 函数。其它每个 try...except 块有着相似的 else 子句,当我们发现一个 import 可用时,就绑定 getpass 到适合的函数。