python【系列教程】之異常處理

 一、使用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'))

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章