一、使用try....except 捕獲異常
import sys
try:
a = int(sys.argv[1])
b = int(sys.argv[2])
c = a/b
print('您輸入的兩個數相除的結果是:',c)
except IndexError:
print('索引錯誤,運行程序時輸入的參數個數不夠')
except ValueError:
print('數值錯誤,程序只能接收整數參數')
except ArithmeticError:
print('算術錯誤')
except Exception:
print("未知異常")
#多異常捕獲
import sys
try:
a = int(sys.argv[1])
b = int(sys.argv[2])
c = a/b
print('您輸入的兩個數相除的結果是:',c)
except (IndexError,ValueError,ArithmeticError):
print('程序發生了數組越界,數字格式異常,算術異常之一')
except Exception:
print("未知異常")
#訪問異常信息
def foo():
try:
fis = open("a.txt")
except Exception as e:
print(e.args)
print(e.errno)
print(e.strerror)
foo()
# finally 的使用
s = input('請輸入除數:')
try:
result = 20 / int(s)
print('20 除以%s的結果是:%g' % (s, result))
except ValueError:
print("值錯誤")
except ArithmeticError:
print("算術錯誤")
else:
print("沒有出現異常")
finally:
print("資源回收")
# 異常處理嵌套
# 使用raise引發異常
"""raise:單獨一個raise,該語句引發當前上下文中捕獲的異常,比如在except塊中,
或者默認引發RuntimeError異常。
raise 異常類:raise後帶一個異常類,該語句引發指定異常類的默認實例
raise 異常對象:引發指定的異常對象
"""
# 自定義異常類
class AuctionException(Exception): pass
# traceback模塊來處理異常傳播軌跡,使用traceback可以方便的處理python的異常傳播
# 軌跡。導入traceback模塊之後,traceback提供了兩個常用方法
"""
traceback.print_exc() : 將異常傳播軌跡信息輸出到控制檯或指定文件中
format_exc() : 將異常傳播軌跡信息轉換成字符串
"""
import traceback
class SelfException(Exception): pass
def main():
print("abc")
try:
main()
except Exception as e:
#捕獲異常,並將異常傳播到控制檯
traceback.print_exc()
#捕獲異常,並將異常信息輸出到指定的文件中
traceback.print_exc(file=open('log.txt', 'a'))