- Python数据分析从小白到专家
- 田越编著
- 650字
- 2021-05-19 18:13:36
3.3.2 错误、异常和异常处理
从程序和软件层面来讲,错误有两种:一种是语法错误,即编译器和解释器不能理解程序员给出的代码而使得程序无法运行;另一种是逻辑上的错误,即程序可以运行,但程序员得不到原本想要的结果,或者程序在运行过程中发生错误,如栈溢出等。当Python检测到一个错误而使得程序无法运行时,则称“异常”出现了。
所以异常有两个阶段:首先是发生异常,可以是程序触发的,也可以是程序员手动触发的;其次是Python解释器检测到异常的出现,抛出一个异常产生的信号,当前运行的线程中断,并处理这个错误。
为了防止一些“无关痛痒”的错误出现而打断程序,需要用到异常处理语句try-except。try下面跟随一个语句,如果它出现了except所期望的异常,则except将处理这个错误,即运行其下挂的语句块的代码;如果try下挂的语句没有出现异常,则except下挂的语句是不会启用的,正如前面学习的示例一样,当捕捉到NameError时打印句子“目标对象已被删除”,提示用户str2已经被手动清除了,代码如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_56_3.jpg?sign=1739550358-7hiHrj6AjL6s9ndB6Hp2iGRHz6PxPC1q-0-617ad8f6edc42065c65d006a516482be)
Python中除NameError外的其他常见异常如表3-8所示。
表3-8 Python中除NameError外的其他常见异常
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_56_4.jpg?sign=1739550358-abbOmeMmNCcrrP9NfBDwfTgO2l82qySt-0-742c465643bebb63724b0518669d7136)
续表
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_57_1.jpg?sign=1739550358-8LUWpIhdnbLX8RtNfKKsYFGBqgNWdouL-0-8b4372c0db99b55cd76d10b2c644aa3e)
else语句可以和try-except语句连用组成try-except-else语句,示例如下:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_57_2.jpg?sign=1739550358-3pIxbhVdhtP17LfcFUc9O0a6RS2AEnuZ-0-171bc86e553898ccccf0560bfeb24819)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_57_3.jpg?sign=1739550358-CicNEbEmfS8CfqofioAPTdRVW4Koljzm-0-e933e9be10e23f3e7a5784c6662d4371)
上述代码的运行流程为输出用户输入的字符,当用户按Ctrl+Z快捷键时,程序中断并返回“中断错误”。还有一种语句是try-finally,它与try-except语句的区别在于,无论异常是否发生都运行finally下挂的语句,示例如下(在进行此操作之前先在F盘中新建一个TXT文件,并将其命名为1.py):
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_57_4.jpg?sign=1739550358-ut6LpxT3zEmf3Enss8oaHBD8Mn8cd5Dt-0-124973d4a06aae2179b3f9a62e79074c)
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_58_1.jpg?sign=1739550358-o3h5tIfOInKsGB3UdvOoBO5B1hWexRZh-0-df98309c7d03b19fe4fb3b28c09a71bc)
输出结果:
![](https://epubservercos.yuewen.com/ED1E6A/20118172701012106/epubprivate/OEBPS/Images/40923_58_2.jpg?sign=1739550358-0Qlm51mxtdkj3afpL7FnnR8hLsjeQzbU-0-0d4019ae336c6a848abf7887218e7090)
可以看到,由于打开了1.py文件,try-except没有捕捉到IOError,所以没有打印语句“没有文件。”,而try-finally无论是否打开了1.py文件都会打印语句“有没有都一样。”。