1. 程式人生 > 實用技巧 >Educational Codeforces Round 93 (Rated for Div. 2)

Educational Codeforces Round 93 (Rated for Div. 2)

"""
1、什麼是異常
異常是錯誤發生的訊號,一旦程式出錯就會產生一個異常
如果該異常沒有被處理,該異常就會被丟擲來,程式的執行隨即終止

如圖:

異常常用種類

AttributeError 試圖訪問一個物件沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法開啟檔案
ImportError 無法引入模組或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;程式碼沒有正確對齊
IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5]
KeyError 試圖訪問字典裡不存在的鍵
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予物件的變數
SyntaxError Python程式碼非法,程式碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入物件型別與要求的不符合
UnboundLocalError 試圖訪問一個還未被設定的區域性變數,基本上是由於另有一個同名的全域性變數,
導致你以為正在訪問它
ValueError 傳入一個呼叫者不期望的值,即使值的型別是正確的
異常是由三部分組成
1、具體哪一行程式碼丟擲的異常
2、異常的種類
NameError:變數名沒有定義過
IndexError:索引不存在
l=[11,22]
l[100]
KeyError
d={"k1":11}
d["k2"]

AttributeError:物件屬性不存在
物件.屬性

ValueError:
int("asdf")

TypeError:
"asdf"+1111

ZeroDivisionError
1/0
3、異常的內容資訊

2、為何要處理異常
為了增強程式的健壯性

3、如何處理異常
1、針對語法的錯誤:應該在程式執行前立即改正
2、針對邏輯錯誤:
2.1 如果邏輯錯誤發生的條件是可以預知的,應該if判斷解決,預防異常
age = input('>>: ').strip()

if age.isdigit():
age=int(age)
if age > 18:
print('too big')
elif age < 18:
print('too small')
else:
print("got it")
else:
print('必須輸入數字')
2.2 如果邏輯錯誤發生的條件是不可預知的,那麼異常一個會發生,考慮到程式的健壯性
我們應該處理異常,做好補救措施
try:
程式碼塊
except 異常的型別:
發生異常後要執行的程式碼

"""

# 例1

# try:

# print("====>111")

# print("====>222")

# xxx

# print("====>333")

# except AttributeError as e:

# print(e)

#

# print('====>4')

# 例2

# try:

# print("====>111")

# print("====>222")

# xxx

# print("====>333")

# except NameError as e:

# print(e)

#

# print('====>4')

# # 例3

# try:

# print("====>111")

# print("====>222")

# # xxx

# # l=[]

# # l[0]

# dic={}

# dic["k1"]

# print("====>333")

# except (NameError,IndexError) as e:

# print("=---->",e)

# except KeyError as e:

# print(e)

#

# print('====>4')

# # 例4

# try:

# print("====>111")

# print("====>222")

# xxx=111

# # l=[]

# # l[0]

# dic={}

# # dic["k1"]

# print("====>333")

# except (NameError,IndexError) as e:

# print("=---->",e)

# except KeyError as e:

# print(e)

# finally:

# print("一定會執行")

# print('====>4')

# # print(xxx)


# # 例4

# try:

# print("====>111")

# print("====>222")

# finally:

# print("一定會執行")

# print('====>4')

# # print(xxx)

# # 例5

# try:

# print("====>111")

# print("====>222")

# # xxx

# l=[]

# # l[0]

# dic={}

# dic["k1"]

# print("====>333")

# except Exception as e:

# print("萬能異常",e)

# print('====>4')

# 例6

# print('==>11')

# raise NameError("變數名未定義")

# print('==>222')


# class Animal:

# def speak(self):

# raise BaseException("小垃圾必須實現speak方法來覆蓋")

#

# def run(self):

# raise BaseException("小垃圾必須實現run方法來覆蓋")

#
#

# class Dog(Animal):

# pass

#

# class Pig(Animal):

# pass

#
#

# d=Dog()

# p=Pig()

#

# d.speak()

# d.run()

# p.speak()

# d.run()

# 例7

# class Interface(BaseException):

# def __init__(self, msg, x, y, z):

# self.msg = msg

# self.x = x

# self.y = y

# self.z = z

#

# def __str__(self):

# return "<%s:%s:%s:%s>" % (self.msg,self.x,self.y,self.z)

#
#

# raise Interface("介面異常", 11, 22, 33)

# 例8:

print("====1")
print("====2")
print("====3")
salaries=[1.1,2.2]

# if len(salaries) != 3:

# raise NameError

assert len(salaries) == 3

print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])
print(salaries[2])