一.異常
1、try
(1)接收抛出的異常,使程式在發生異常時仍然可以運作下去,而不是報錯停止
# try:
# num = int(input('請輸入一個整數:')) #将不确定是否正常運作的操作放到try中
# except:
# print('請輸入正确的類型') #若try中的操作不能正常運作,則運作該操作
# print("*"*20) #結束後運作該操作,來檢視程式運作是否收到影響
#
# # 請輸入一個整數:2.3 #輸入2.3
# # 請輸入正确的類型 #程式無報錯,但提示有錯誤
# # ******************** #程式在錯誤後還可以繼續運作的表現
(2)如何按不同的異常來回報不同的提示
# num = int(input('請輸入一個整數:')) #若沒有接收抛出的異常直接運作程式
# res=8/num
# 請輸入一個整數:0 #0不能做分母
# Traceback (most recent call last):
# File "/home/kiosk/PycharmProjects/20191210/note.py", line 23, in <module>
# res=8/num
# ZeroDivisionError: division by zero #程式報錯無法繼續運作,且錯誤為“ ZeroDivisionErro”
# 請輸入一個整數:abc #abc不是整數
# Traceback (most recent call last):
# File "/home/kiosk/PycharmProjects/20191210/note.py", line 22, in <module>
# num = int(input('請輸入一個整數:'))
# ValueError: invalid literal for int() with base 10: 'abc' #程式報錯無法繼續運作,且錯誤為“ValueError”
# try:
# num = int(input('請輸入一個整數:'))
# res=8/num
# # except ZeroDivisionError: #當錯誤為“ZeroDivisionError”時,回報此結果
# # print("0不能做分母")
# # except ValueError: #當錯誤為“ValueError”時,回報此結果
# # print("請輸入正确的資料類型")
#
# # 請輸入一個整數:abc #測試ValueError的回報
# # 請輸入正确的資料類型 #回報結果正确
#
# # 請輸入一個整數:0 #測試ZeroDivisionError的回報
# # 0不能做分母 #回報結果正确
(3)建立所有未知錯誤情況時回報的結果
# except Exception as a: #當發生沒有記錄在内的錯誤時,進行的操作
# print("發生未知錯誤",a) #列印發生未知錯誤,與a的值
#
# #發生未知錯誤 invalid literal for int() with base 10: '' #a的值為發生該錯誤時系統自動給出的錯誤提示
#
# else: #否則列印無錯誤
# print('無錯誤')
#
# # 請輸入一個整數:13
# # 無錯誤
(4)添加一個無論try中的操作是否能正常運作,都會執行的操作
# finally: #該操作為:無論try中的操作是否正常運作,都會執行
# print("無論有無錯誤,最後都會執行")
#
# # 請輸入一個整數:1.2 #try中的操作無法正常運作
# # 發生未知錯誤 invalid literal for int() with base 10: '1.2'
# # 無論有無錯誤,最後都會執行
2、函數的錯誤
函數有錯誤時一級一級向上去找,最終會将異常傳遞到主函數中
# def hanshu1():
# try:
# return int(input('請輸入一個整數:'))
# except Exception as a:
# print('發生未知錯誤 %s' %a)
#
# def hanshu2():
# return hanshu1()
#
# print(hanshu2())
#
# # 請輸入一個整數:abc
# # 發生未知錯誤 invalid literal for int() with base 10: 'abc'
# # None
3、主動抛出一個異常
注意:隻抛出而不用try捕獲異常時,代碼會報錯
# def passwd():
# pwd=input('請輸入您的密碼:')
# if len(pwd) >= 8:
# return pwd
# # 抛出異常
# print('主動抛出異常')
# # 建立異常對象
# ex=Exception('密碼需大于8位')
# # 主動抛出
# raise ex
#
# try:
# print(passwd())
# except Exception as a:
# print(a)
#
# # 請輸入您的密碼:123456789
# # 123456789
#
# # 請輸入您的密碼:1234
# # 主動抛出異常
# # 密碼需大于8位
4、斷言
斷言的作用為可以提前預言,讓人更好的知道錯誤原因,但此方法使用時,程式一旦錯誤,就不能繼續運作,隻适合在編寫時自己查錯使用。
# def fun(num,div):
# assert (div != 0),'div不能為0'
# return num/div
# print(fun(10,0))
#
# # Traceback (most recent call last):
# # File "/home/kiosk/PycharmProjects/20191210/note.py", line 115, in <module>
# # print(fun(10,0))
# # File "/home/kiosk/PycharmProjects/20191210/note.py", line 113, in fun
# # assert (div != 0),'div不能為0'
# # AssertionError: div不能為0
二.sys子產品——參數的擷取
# import os
# import sys
# print(sys.argv)
#
# #['/home/kiosk/PycharmProjects/20191210/note.py'] #将目前的位址參數放到一個清單裡
#
# print(sys.argv[0])
#
# #/home/kiosk/PycharmProjects/20191210/note.py #擷取腳本傳遞的序列号為0的參數
#
# print(sys.version) #可獲得目前使用的python的版本号
#
# # 3.6.4 (default, Nov 26 2019, 10:03:05)
# # [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
#
# if sys.version[0] == '2': #通過檢視序列号為0的參數的值來判斷python的大版本為2還是3
# print('這是python2')
# elif sys.version[0] == '3':
# print('這是python3')
#
# #這是python3
(1)傳回子產品的搜尋路徑 初始pythonpath環境變量
# print(sys.path)
#
# #'/home/kiosk/PycharmProjects/20191210', '/home/kiosk/PycharmProjects/20191210', ...(以下省略)
(2)跨平台的實作
# print(sys.platform) #檢視目前的平台
# #linux
# if sys.platform == 'linux': #若目前平台為linux
# os.system('ifconfig') #執行指令ifconfig(檢視網卡資訊)
# else: #若為其他平台
# os.system('ipconfig') #執行指令ipconfig(其他平台中檢視網卡資訊的指令)
# br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500...(以下省略)
# inet 172.25.254.54 netmask 255.255.255.0 broadcast 172.25.254.255...(以下省略)
# inet6 fe80::221:ccff:fe6e:64b5 prefixlen 64 scopeid 0x20<link>...(以下省略)