Python学习笔记(10):异常
当程序执行的时候,可能会出现一些异常现象,这个可能是会存在的。例如,你在读文件的时候,而那个文件不存在。此时,我们可以用异常来处理。
1. 错误
我们来做个简单的测试,我们故意把print方法写出Print。
>>> Print("Hello world")
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
Print("Hello world")
NameError: name 'Print' is not defined
>>>
系统会抛出NameError异常。
2. try..except
我们可以用try..except处理异常。
1 2 3 4 5 6 7 8 9 | try : f = open ( "test.txt" ) f.close() except (IOError): print ( "The file is not exist." ) except : print ( "Some error occurred." ) print ( "Done" ) |
运行结果:
The file is not exist.
Done
3. 引发异常
你可以用raise语句来引发异常。我们先自定义一个ShortInputError异常,需要继承Exception类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class ShortInputError(Exception): '''A user-defined exception class.''' def __init__( self , length, atleast): Exception.__init__( self ) self .length = length self .atleast = atleast try : s = input ( "Enter something -->" ) if len (s) < 3 : raise (ShortInputError( len (s), 3 )) #Other work can continue as usual here except (EOFError): print ( "Why did you do an EOF on me?" ) except ShortInputError as e: print ("ShortInputError: The input was of length % d, \ was expecting at least % d" % (e.length, e.atleast)) else : print ( "No exception was raised." ) |
输入两个字符运行结果:
>>>
Enter something -->tr
ShortInputError: The input was of length 2, was expecting at least 3
>>>
输入三个字符以上运行结果:
>>>
Enter something -->test
No exception was raised.
>>>
4. try..finally
假如你在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。注意,在一个try块下,你可以同时使用except从句和finally块。如果你要同时使用它们的话,需要把一个嵌入另外一个。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import time try : f = open ( "poem.txt" ) while True : # our usual file-reading idiom line = f.readline() if len (line) = = 0 : break time.sleep( 2 ) print (line), finally : f.close() print ( "Cleaning up...closed the file" ) |
运行结果:
>>>
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
Cleaning up...closed the file
>>>
1 2 3 4 5 6 7 8 9 | def divide(x, y): try : result = x / y except ZeroDivisionError: print ( "Division by zero!" ) else : print ( "result is" , result) finally : print ( "executing finally clause" ) |
测试结果:
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
Division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
divide("2", "1")
File "<pyshell#10>", line 3, in divide
result = x/ y
TypeError: unsupported operand type(s) for /: 'str' and 'str'
>>>
Known 是基于 Blazor 轻量级、跨平台、低代码、易扩展的插件开发框架。
源码:https://gitee.com/known/Known
源码:https://github.com/known/Known
如果对您有帮助,点击⭐Star⭐关注 ,感谢支持开源!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!