Python中使用异常处理来判断运行的操作系统平台方法
代码实例:
try: importtermios,TERMIOS1 exceptImportError: try: importmsvcrt2 exceptImportError: try: fromEasyDialogsimportAskPassword3 exceptImportError: 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独有的一个模块,可以提供在MicrosoftVisualC++运行服务中的许多有用的函数的一个API。如果导入失败,Python会引发我们捕捉的ImportError异常。
3:如果前两个不能工作,我们试着从EasyDialogs导入一个函数,它是MacOS独有的一个模块,提供了各种各样类型的弹出对话框。再一次,如果导入失败,Python会引发一个我们捕捉的ImportError异常。
4:这些平台特定的模块没有一个有效(有可能,因为Python已经移植到了许多不同的平台上了),所以我们需要回头使用一个缺省口令输入函数(这个函数定义在getpass模块中的别的地方)。注意我们在这里所做的:我们将函数default_getpass赋给变量getpass。如果你读了官方getpass文档,它会告诉你getpass模块定义了一个getpass函数。它是这样做的:通过绑定getpass到正确的函数来适应你的平台。然后当你调用getpass函数时,你实际上调用了平台特定的函数,是这段代码已经为你设置好的。你不需要知道或关心你的代码正运行在何种平台上;只要调用getpass,则它总能正确处理。
5:一个try...except块可以有一条else子句,就像if语句。如果在try块中没有异常引发,然后else子句被执行。在本例中,那就意味着如果fromEasyDialogsimportAskPassword导入可工作,所以我们应该绑定getpass到AskPassword函数。其它每个try...except块有着相似的else子句,当我们发现一个import可用时,就绑定getpass到适合的函数。