<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在python中,錯誤觸發的異常如下
在python中不同的異常可以用不同的型別去標識,一個異常標識一種錯誤。
# TypeError:int型別不可迭代 for i in 3: pass # ValueError num=input(">>: ") #輸入hello int(num) # NameError aaa # IndexError l=['egon','aa'] l[3] # KeyError dic={'name':'egon'} dic['age'] # AttributeError class Foo:pass Foo.x # ZeroDivisionError:無法完成計算 res1=1/0 res2=1+'str'
try: 被檢測的程式碼塊 except 異常型別: try中一旦檢測到異常,就執行這個位置的邏輯
舉例
try: f = [ 'a', 'a', 'a','a','a', 'a','a',] g = (line.strip() for line in f) #元組推導式 print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) except StopIteration: f.close()
異常類只能用來處理指定的異常情況,如果非指定異常則無法處理。
s1 = 'hello' try: int(s1) except IndexError as e: # 未捕獲到異常,程式直接報錯 print(e)
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) except Exception as e: print(e)
try/except 語句還有一個可選的 else 子句,如果使用這個子句,那麼必須放在所有的 except 子句之後。
else 子句將在 try 子句沒有發生任何異常的時候執行。
for arg in sys.argv[1:]: try: f = open(arg, 'r') except IOError: print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') f.close()
try-finally 語句無論是否發生異常都將執行最後的程式碼。
定義清理行為:
s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) #except Exception as e: # print(e) else: print('try內程式碼塊沒有異常則執行我') finally: print('無論異常與否,都會執行該模組,通常是進行清理工作')
#invalid literal for int() with base 10: 'hello'
#無論異常與否,都會執行該模組,通常是進行清理工作
Python 使用 raise 語句丟擲一個指定的異常。
raise語法格式如下:
raise [Exception [, args [, traceback]]]
try: raise TypeError('丟擲異常,型別錯誤') except Exception as e: print(e)
raise 唯一的一個引數指定了要被丟擲的異常。它必須是一個異常的範例或者是異常的類(也就是 Exception 的子類)。
如果你只想知道這是否丟擲了一個異常,並不想去處理它,那麼一個簡單的 raise 語句就可以再次把它丟擲。
try: raise NameError('HiThere') except NameError: print('An exception flew by!') raise #An exception flew by! #Traceback (most recent call last): # File "", line 2, in ? #NameError: HiThere
你可以通過建立一個新的異常類來擁有自己的異常。異常類繼承自 Exception 類,可以直接繼承,或者間接繼承,例如:
在這個例子中,類 Exception 預設的 __init__() 被覆蓋。
class EgonException(Exception): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg try: raise EgonException('丟擲異常,型別錯誤') except EgonException as e: print(e) #丟擲異常,型別錯誤
當建立一個模組有可能丟擲多種不同的異常時,一種通常的做法是為這個包建立一個基礎異常類,然後基於這個基礎類為不同的錯誤情況建立不同的子類:
大多數的異常的名字都以"Error"結尾,就跟標準的異常命名一樣。
class Error(Exception): """Base class for exceptions in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the error """ def __init__(self, expression, message): self.expression = expression self.message = message class TransitionError(Error): """Raised when an operation attempts a state transition that's not allowed. Attributes: previous -- state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed """ def __init__(self, previous, next, message): self.previous = previous self.next = next self.message = message
assert(斷言)用於判斷一個表示式,在表示式條件為 false 的時候觸發異常。
斷言可以在條件不滿足程式執行的情況下直接返回錯誤,而不必等待程式執行後出現崩潰的情況。
語法格式如下:
assert expression
等價於:
if not expression: raise AssertionError
assert 後面也可以緊跟引數:
assert expression [, arguments]
等價於:
if not expression: raise AssertionError(arguments)
以下範例判斷當前系統是否為 Linux,如果不滿足條件則直接觸發異常,不必執行接下來的程式碼:
import sys assert ('linux' in sys.platform), "該程式碼只能在 Linux 下執行" # 接下來要執行的程式碼 # Traceback (most recent call last): # File "C:/PycharmProjects/untitled/run.py", line 2, in # assert ('linux' in sys.platform), "該程式碼只能在 Linux 下執行" # AssertionError: 該程式碼只能在 Linux 下執行
到此這篇關於Python例外處理的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45