Python笔记(十五)_异常处理
try-except語句
try:
被檢測代碼
except Exception [as reason]:
出現異常后的處理代碼
?
例:
>>>try:
sum = 1+'1'
f=open('未定義文件.txt')
print(f.read())
f.close
except OSError as reason:
print('文件出錯啦!錯誤原因:' + str(reason))
except TypeError as reason:
print('類型錯誤' + str(reason))
運行結果:類型錯誤unsupported operand type(s) for +: 'int' and 'str'
其中第三行到第7行代碼未運行,原因是try語句中一旦出現異常,就會直接定位到對應的except語句去,剩下的檢測代碼不會再被運行
?
try-finally語句
try:
被檢測代碼
except Exception [as reason]:
出現異常后的處理代碼
finally:
無論如何都會被執行的代碼
?
例:
try:
f=open('123.txt','w')
print(f.write('hello'))
sum=1+'1' ? ? #此處發生異常會直接跳過f.close()語句,造成寫入的數據不能被保存
f.close()
except (OSError,TypeError):
print('出錯啦!')
?
所以可以用try-finally語句來避免這種情況,修改:
try:
f=open('123.txt','w')
print(f.write('hello'))
sum=1+'1' ? ? #此處發生異常會直接跳過f.close()語句,造成寫入的數據不能被保存
f.close()
except (OSError,TypeError):
print('出錯啦!')
finally:
f.close()
?
raise語句
自身引發一個異常
>>>try:
for each in range(3):
if each==1:
raise KeyboardInterrupt
print(each)
except KeyboardInterrupt:
print('退出啦!')
0
退出啦
?
assert斷言
斷言等價于布爾真值得判定,在Python中它們運行時進行判別
斷言語句:
assert expression[,arguments]
可以想象成raise if
比如:
assert 1==1
assert len('my list')<10
?
?python標準異常總結
?
| AssertionError | 斷言語句(assert)失敗 |
| AttributeError | 嘗試訪問未知的對象屬性 |
| EOFError | 用戶輸入文件末尾標志EOF(Ctrl+d) |
| FloatingPointError | 浮點計算錯誤 |
| GeneratorExit | generator.close()方法被調用的時候 |
| ImportError | 導入模塊失敗的時候 |
| IndexError | 索引超出序列的范圍 |
| KeyError | 字典中查找一個不存在的關鍵字 |
| KeyboardInterrupt | 用戶輸入中斷鍵(Ctrl+c) |
| MemoryError | 內存溢出(可通過刪除對象釋放內存) |
| NameError | 嘗試訪問一個不存在的變量 |
| NotImplementedError | 尚未實現的方法 |
| OSError | 操作系統產生的異常(例如打開一個不存在的文件) |
| OverflowError | 數值運算超出最大限制 |
| ReferenceError | 弱引用(weak reference)試圖訪問一個已經被垃圾回收機制回收了的對象 |
| RuntimeError | 一般的運行時錯誤 |
| StopIteration | 迭代器沒有更多的值 |
| SyntaxError | Python的語法錯誤 |
| IndentationError | 縮進錯誤 |
| TabError | Tab和空格混合使用 |
| SystemError | Python編譯器系統錯誤 |
| SystemExit | Python編譯器進程被關閉 |
| TypeError | 不同類型間的無效操作 |
| UnboundLocalError | 訪問一個未初始化的本地變量(NameError的子類) |
| UnicodeError | Unicode相關的錯誤(ValueError的子類) |
| UnicodeEncodeError | Unicode編碼時的錯誤(UnicodeError的子類) |
| UnicodeDecodeError | Unicode解碼時的錯誤(UnicodeError的子類) |
| UnicodeTranslateError | Unicode轉換時的錯誤(UnicodeError的子類) |
| ValueError | 傳入無效的參數 |
| ZeroDivisionError | 除數為零 |
轉載于:https://www.cnblogs.com/demilisi/p/11038389.html
總結
以上是生活随笔為你收集整理的Python笔记(十五)_异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 猜数游戏,随机目标数字,直到猜中退出
- 下一篇: java高并发实战Netty+协程(Fi