python 下標越界 Python中異常處理

2021-10-11 22:23:55 字數 2309 閱讀 8880

高階語言通常都配置了一套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')輸出結果

enderror: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!

陣列下標越界

原理 因為c語言不會檢測陣列下標,所以如果我們給陣列乙個超出它大小的下標,就會照成陣列越界。如果是想陣列中寫入資料的話,就會造成資料寫入到不屬於陣列的地方,或者說如果讀取資料的話,就會讀取到別的地方的資料。因為陣列位址是自低往高增長,而棧的位址是自高向下降低,所以如果我們將陣列下標根據棧內的空間的分...

C陣列下標越界

之前總聽說c語言的各種毛病,今天算是遇到乙個 陣列下標越界 兩段完成不相干的 一段是測溫度的,一段是測轉速的。兩段 單獨執行都沒有問題,但是若執行測轉速的 測溫度的資料就會發生錯誤。一步檢視,發現執行測轉速之後,測溫度的 中的乙個變數和乙個資料的值就會發生詭異的錯誤 陣列下標越界 這個越界非常不明顯...

python字串下標越界 Python 字串

str1 abcdef 字串 str型 int1 1 整數 int型 float1 1.3 浮點數,float型 str2 abcdef 單引號和雙引號都可以表示字串 print str1,str2 在某一行按下ctrl 就可以進行注釋,注釋就是程式不執行該行 注釋是給人看的,而不是給程式看的 pr...