python 下标越界_Python中异常处理
高級語言通常都配置了一套try...except...finally的錯誤處理機制。
1、我們先看一個try的機制
try:
res=1/0
except ZeroDivisionError as e:
print("出錯了,除數不能為0",e)
運行結果為:
出錯了,除數不能為0 division by zero
當我們認為某些代碼可能會出錯時,就可以用try來運行這段代碼,如果只選出錯,則后續代碼不會執行
而是直接跳轉至錯誤處理代碼,即except語句塊
2、另外一個例子:
l=[]
dic={}
try:
print(dic['name'])
print(l[-1])
except KeyError as e:
print('字典key不存在',e)
except IndexError as e:
print("出錯了,下標越界",e)
except Exception as e:#捕捉所有的異常
print("未知異常",e)
else:
print("沒有出現異常...")
finally:#不管出現 異常和不出現異常,都會執行
print("什么時候執行finally")
輸出結果:
字典key不存在 'name'
什么時候執行finally
key不存在,我們就拋出一個keyerror的錯誤,下標越界,我們就拋出一個indexerror的錯誤
如果沒有錯誤,就在except語句塊后面加一個else,當沒有錯誤發生時,就自動執行else
finally是不管什么時候都執行的語句
3、記錄錯誤
如果不捕獲錯誤,自然可以讓python解釋器來打印出錯誤堆棧,但是程序也被結束了,既然我們能捕獲錯誤,就
可以把錯誤打印出來,然后分析錯誤,同時讓程序執行下去
Python內置的loging模塊可以記錄錯誤
import logging
def foo(s):
return 10 / int(s)
def bar(s):
return foo(s) * 2
def main():
try:
bar('0')
except Exception as e:
logging.exception(e)
main()
print('END')輸出結果
END
ERROR:root:division by zero
Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/記錄錯誤.py", line 12, in main
bar('0')
File "C:/Users/zyq64/PycharmProjects/1018/day10/記錄錯誤.py", line 8, in bar
return foo(s) * 2
File "C:/Users/zyq64/PycharmProjects/1018/day10/記錄錯誤.py", line 5, in foo
return 10 / int(s)
ZeroDivisionError: division by zero
同樣是出錯,但是程序打印完錯誤信息后會繼續執行,并正常退出
4、主動拋出錯誤 raise
try:
10 / 0
except ZeroDivisionError:
raise ValueError('input error!')
輸出結果:
Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/異常處理.py", line 38, in
10 / 0
ZeroDivisionError: division by zero
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:/Users/zyq64/PycharmProjects/1018/day10/異常處理.py", line 40, in
raise ValueError('input error!')
ValueError: input error!
總結
以上是生活随笔為你收集整理的python 下标越界_Python中异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单臂路由配置实验同一交换机上vlan间p
- 下一篇: vba quit此文件正由另一个应用程序