A. python拋出異常後如何繼續循環
for num in range(10):
try:
print(100/(num-3))
except ZeroDivisionError:
print('當前分母為0')
B. Python with as為什麼無法捕獲異常
with在打開文件的這個操作中的作用是保證每次正常打開文件後,不論遇到什麼,最後都會執行文件的關閉操作,避免腳本中遺漏。但是他自身並沒有抓取異常的處理機制。
with open("asdasdas") as a:
print("打開成功")
do_something()
這段代碼的含義,相當於打開了文件「asdasdas」後列印了「打開成功」的字樣後,又處理了do_something()這段邏輯。不論do_something()這段邏輯正常執行結束,還是拋出異常,都會保證最終「asdasdas」這個文件都會被關閉。避免因為文件未被關閉而導致的種種問題。
你的代碼可以改為以下部分,這樣就可以catch到讀取文件中的異常了。
try:
with open("asdasdas") as a:
print("打開成功")
except:
print("打開失敗")
C. python拋出異常如何操作
8.4. 拋出異常
raise 語句允許程序員強制拋出一個指定的異常。例如:
>>> raise NameError('HiThere')
Traceback (most recent call last):
File "
", line 1, in ?
NameError: HiThere
要拋出的異常由 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
D. python3 unittest中,用例中斷言失敗拋出的異常,誰來捕獲處理
#setUP 還有 tearDown就是用來做工作的不是么class myTest(unittest.TestCase): def setUp(self): demo1() def tearDown(self): demo2()
E. python異常值處理
如果你用 Python 編程,那麼你就無法避開異常,因為異常在這門語言里無處不在。打個比方,當你在腳本執行時按 ctrl+c 退出,解釋器就會產生一個 KeyboardInterrupt 異常。而 KeyError、ValueError、TypeError 等更是日常編程里隨處可見的老朋友。
異常處理工作由「捕獲」和「拋出」兩部分組成。「捕獲」指的是使用 try ... except 包裹特定語句,妥當的完成錯誤流程處理。而恰當的使用 raise 主動「拋出」異常,更是優雅代碼里必不可少的組成部分。
異常分類
BaseException所有異常的基類
Exception常見錯誤的基類
ArithmeticError所有數值計算錯誤的基類
Warning警告的基類
AssertError斷言語句(assert)失敗
AttributeError嘗試訪問未知的對象屬性
DeprecattionWarning關於被棄用的特徵的警告
EOFError用戶輸入文件末尾標志EOF(Ctrl+d)
FloattingPointError浮點計算錯誤
FutureWarning關於構造將來語義會有改變的警告
GeneratorExitgenerator.close()方法被調用的時候
ImportError導入模塊失敗的時候
IndexError索引超出序列的范圍
KeyError字典中查找一個不存在的關鍵字
KeyboardInterrupt用戶輸入中斷鍵(Ctrl+c)
MemoryError內存溢出(可通過刪除對象釋放內存)
NamerError嘗試訪問一個不存在的變數
NotImplementedError尚未實現的方法
OSError操作系統產生的異常(例如打開一個不存在的文件)
OverflowError數值運算超出最大限制
OverflowWarning舊的關於自動提升為長整型(long)的警告
PendingDeprecationWarning關於特徵會被遺棄的警告
ReferenceError弱引用(weakreference)試圖訪問一個已經被垃圾回收機制回收了的對象
RuntimeError一般的運行時錯誤
RuntimeWarning可疑的運行行為(runtimebehavior)的警告
StopIteration迭代器沒有更多的值
SyntaxErrorPython的語法錯誤
SyntaxWarning可疑的語法的警告
IndentationError縮進錯誤
TabErrorTab和空格混合使用
SystemErrorPython編譯器系統錯誤
SystemExitPython編譯器進程被關閉
TypeError不同類型間的無效操作
UnboundLocalError訪問一個未初始化的本地變數(NameError的子類)
UnicodeErrorUnicode相關的錯誤(ValueError的子類)
UnicodeEncodeErrorUnicode編碼時的錯誤(UnicodeError的子類)
UnicodeDecodeErrorUnicode解碼時的錯誤(UnicodeError的子類)
UserWarning用戶代碼生成的警告
ValueError傳入無效的參數
ZeroDivisionError除數為零
F. 一個簡單的Python程序,關於異常捕捉。
func('ad'),沒有加分號,系統認為是變數,而該變數未定義,所以報錯了。
G. python中主線程怎樣捕獲子線程的異常
最近因為別的需求,寫了一個模塊,似乎在這里能用得上:
https://github.com/SakuraSa/ChatProcess
其中的 example.py :
#!/usr/bin/envpython
#coding=utf-8
"""
example
"""
__author__='Rnd495'
fromtimeimportsleep
fromChatProcessimportChatroom
classEcho(Chatroom):
"""
Echo
"""
defresponse(self,data):
ifdata.startswith('sleep'):
sec=float(data[6:])
sleep(sec)
return'wakeupafter%dms'%(sec*1000)
elifdata:
returndata
else:
self.stop()
return'goodbye'
if__name__=='__main__':
,ProcessError
print'process01:'
e=Echo.create_process(lifetime=1).start()
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:0.1'),e.remain
printe.chat(''),e.remain
print''
print'process02:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:1.0'),e.remain
printe.chat(''),e.remain
exceptTimeoutError,error:
print'error:',error
print''
print'process03:'
e=Echo.create_process(lifetime=1).start()
try:
printe.chat('Helloworld!'),e.remain
printe.chat('sleep:notanum'),e.remain
printe.chat(''),e.remain
exceptProcessError,error:
print'error:',error
運行結果為:
process01:
Helloworld!0.773000001907
wakeupafter100ms0.549000024796
goodbye0.547000169754
process02:
Helloworld!0.868000030518
error:TimeoutError
process03:
Helloworld!0.868000030518
error:('Erroroccurredonloop',ValueError('couldnotconvertstringtofloat:notanum',))
在其中的 process01 中,主進程捕獲了 超時
在其中的 process02 中,主進程捕獲了 子進程的錯誤
不知道你能不能用得上
H. Python 網頁打開異常捕獲
可以直接就寫個except,捕獲所有異常,也可以自己指定異常哇,比如常見的Timeout、IOError、HTTPError等等
I. python線程如何捕獲中斷信號
import threadtext = Nonedef get_input(): global text text = raw_input()def main(): while True: print "running" if text != None: breakthread.start_new_thread(get_input,())main()
global全局變數吧?看看上面這段代碼是我常用的套路,main()是一個無限循環一直輸出running,如果你按下回車讓get_input()線程里的text變成不是None了,那麼main()就斷了,希望對你有幫助