1. 程式人生 > 實用技巧 >安裝IDEA2019【破解】

安裝IDEA2019【破解】

異常是錯誤發生的訊號,一旦程式出錯就會產生一個異常,
如果該異常沒有被應用程式處理,那麼該異常就會丟擲來,程式的執行也隨之終止。

異常包含三個部分:

    1. traceback異常的追蹤資訊
    2. 異常的型別
    3. 異常的資訊

錯誤分為兩大類:
1.語法上的錯誤:在程式執行前就應該立即修正
2.邏輯上的錯誤

二、為何要異常處理

避免程式因為異常而崩潰,所以在應用程式中應該對異常進行處理,從而增強程式的健壯性

三、如何異常處理

try:  #try監聽下面的程式碼塊
    程式碼1
    程式碼2
    程式碼3
    ......
except NameError:
    當丟擲的異常時 NameError時執行的子程式碼塊
# 異常處理:
try:
    print('====>1')
    print('====>2')
    print('====>3')
    l = [1,2,3]
    l[100] #IndexError  #執行到此處直接跳到except下的程式碼塊
    print('====>4')  #不執行
except IndexError:
    print('IndexError')
#異常處理多分支
try:
    print('====>1')
    print('====>2')
    print('====>3
') l = [1,2,3] d = {'x':1,'y':2} d['z'] #KeyError l[100] #IndexError #執行到此處直接跳到except下的程式碼塊 print('====>4') #不執行 except IndexError: print('IndexError') except KeyError: print('KeyError') print('other code')
try:
    print('====>1')
    print('====>2')
    print
('====>3') l = [1,2,3] d = {'x':1,'y':2} # d['z'] #KeyError # l[100] #IndexError print('====>4') #不執行 except (KeyError,IndexError) as e: #(KeyError,IndexError)捕捉其中一種異常 print(e)

萬能異常型別 Exception:可以捕捉任意型別的異常

try:
    print('====>1')
    print('====>2')
    print('====>3')
    l = [1,2,3]
    d = {'x':1,'y':2}
    d['z'] #KeyError
    l[100] #IndexError
    print('====>4')  #不執行
except Exception as e:  # as 給異常起別名
    print(e)
print('other code')

try + else...:else必須放到後面,else的子程式碼塊會在被檢測的程式碼沒有異常的情況下執行

try:
    print('=====1')
    print('=====2')
    print('=====3')
    d = {'x': 1, 'y': 2}
    # d['z']  # KeyError
    # xxx
    print('=====4')
    l = [1, 2, 3]
    # l[1000]  # IndexError
    print('=====5')
except IndexError as e:
    print('IndexError:', e)
except KeyError as e:
    print('KeyError:', e)
except Exception as e:
    print('Exception:',e)
else:
    print('else必須放到後面,else的子程式碼塊會在被檢測的程式碼沒有異常的情況下執行')
print('other code')

try + finally...:無論finally前面被檢測的程式碼有沒有異常都會執行

try:
    f=open('a.txt','w')
    print('=====1')
    print('=====2')
    print('=====3')
    d = {'x': 1, 'y': 2}
    # d['z']  # KeyError
    # xxx
    'xx' > 10
    print('=====4')
    l = [1, 2, 3]
    # l[1000]  # IndexError
    print('=====5')

except IndexError as e:
    print('IndexError:', e)
except KeyError as e:
    print('KeyError:', e)
# except Exception as e:
#     print('Exception:',e)
else:
    print('else必須放到後面,else的子程式碼塊會在被檢測的程式碼沒有異常的情況下執行')
finally:
    print('無論被檢測的程式碼有沒有異常都會執行')
    f.close()
# 主動觸發異常
print('===>1')
print('===>2')
raise TypeError('型別錯誤')
print('===>3')

class People:
    def __init__(self,name,age):
        self.__name=name
        self.__age=age

    def tell_info(self):
        print(self.__name,self.__age)

    def set_info(self,name,age):
        if not isinstance(name,str):
            raise TypeError('名字必須是str型別')
        if not isinstance(age,int):
            raise TypeError('年齡必須是int型別')
        self.__name=name
        self.__age=age

obj=People('egon',18)
# print(obj.__dict__)
# obj.tell_info()

obj.set_info('egon',123)
obj.tell_info()
#自定義異常型別
class MyException(BaseException):
    def __init__(self,msg):
        super().__init__()
        self.msg=msg

    def __str__(self):
        return '<%s>' %self.msg

raise MyException('我自定義的異常')