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


Posted in Python onJanuary 22, 2015

代码实例:

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 到适合的函数。

Python 相关文章推荐
Python中的tuple元组详细介绍
Feb 02 Python
python中引用与复制用法实例分析
Jun 04 Python
Python中字典和集合学习小结
Jul 07 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
关于python2 csv写入空白行的问题
Jun 22 Python
关于python下cv.waitKey无响应的原因及解决方法
Jan 10 Python
深入了解Python在HDA中的应用
Sep 05 Python
Python获取统计自己的qq群成员信息的方法
Nov 15 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
Python wordcloud库安装方法总结
Dec 31 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 #Python
python中实现php的var_dump函数功能
Jan 21 #Python
Python实现获取网站PR及百度权重
Jan 21 #Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 #Python
Python中多线程及程序锁浅析
Jan 21 #Python
Python实现的多线程端口扫描工具分享
Jan 21 #Python
Python中的pprint折腾记
Jan 21 #Python
You might like
php URL跳转代码 减少外链
2011/06/25 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
PHP7 windows支持
2021/03/09 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
代码触发js事件(click、change)示例应用
2013/12/13 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
Jquery获取第一个子元素简单实例
2016/06/02 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
python进阶之多线程对同一个全局变量的处理方法
2018/11/09 Python
Django model update的多种用法介绍
2020/03/28 Python
CSS3动画之利用requestAnimationFrame触发重新播放功能
2019/09/11 HTML / CSS
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
法定代表人授权委托书
2014/09/19 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
美丽心灵观后感
2015/06/01 职场文书
消夏晚会主持词
2015/06/30 职场文书
2016年党课培训学习心得体会
2016/01/07 职场文书
教学反思怎么写
2016/02/24 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python