婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python異常處理與反射相關(guān)問題總結(jié)

Python異常處理與反射相關(guān)問題總結(jié)

熱門標(biāo)簽:北京電信外呼系統(tǒng)靠譜嗎 老人電話機器人 大連crm外呼系統(tǒng) 百度地圖標(biāo)注位置怎么修改 洪澤縣地圖標(biāo)注 地圖標(biāo)注視頻廣告 無錫客服外呼系統(tǒng)一般多少錢 梅州外呼業(yè)務(wù)系統(tǒng) 高德地圖標(biāo)注是免費的嗎

一、異常處理

在程序開發(fā)中如果遇到一些 不可預(yù)知的錯誤 或 你懶得做一些判斷 時,可以選擇用異常處理來做。

import requests
 
while True:
    url = input("請輸入要下載網(wǎng)頁地址:")
    res = requests.get(url=url)
    with open('content.txt', mode='wb') as f:
        f.write(res.content)

上述下載視頻的代碼在正常情況下可以運行,但如果遇到網(wǎng)絡(luò)出問題,那么此時程序就會報錯無法正常執(zhí)行

try:
    res = requests.get(url=url)
except Exception as e:
    代碼塊,上述代碼出異常待執(zhí)行。
print("結(jié)束")
import requests
 
while True:
    url = input("請輸入要下載網(wǎng)頁地址:")
    
    try:
        res = requests.get(url=url)
    except Exception as e:
        print("請求失敗,原因:{}".format(str(e)))
        continue
        
    with open('content.txt', mode='wb') as f:
        f.write(res.content)
num1 = input("請輸入數(shù)字:")
num2 = input("請輸入數(shù)字:")
try:
    num1 = int(num1)
    num2 = int(num2)
    result = num1 + num2
    print(result)
except Exception as e:
    print("輸入錯誤")

以后常見的應(yīng)用場景:

  • 調(diào)用微信的API實現(xiàn)微信消息的推送、微信支付等
  • 支付寶支付、視頻播放等
  • 數(shù)據(jù)庫 或 redis連接和操作
  • 調(diào)用第三方的視頻播放發(fā)的功能,由第三方的程序出問題導(dǎo)致的錯誤。

異常處理的基本格式:

try:
    # 邏輯代碼
except Exception as e:
    # try中的代碼如果有異常,則此代碼塊中的代碼會執(zhí)行。
try:
    # 邏輯代碼
except Exception as e:
    # try中的代碼如果有異常,則此代碼塊中的代碼會執(zhí)行。
finally:
    # try中的代碼無論是否報錯,finally中的代碼都會執(zhí)行,一般用于釋放資源。
 
print("end")
 
"""
try:
    file_object = open("xxx.log")
    # ....
except Exception as e:
    # 異常處理
finally:
    file_object.close()  # try中沒異常,最后執(zhí)行finally關(guān)閉文件;try有異常,執(zhí)行except中的邏輯,最后再執(zhí)行finally關(guān)閉文件。
"""

1.1 異常細分

import requests
 
while True:
    url = input("請輸入要下載網(wǎng)頁地址:")
    
    try:
        res = requests.get(url=url)
    except Exception as e:
        print("請求失敗,原因:{}".format(str(e)))
        continue
        
    with open('content.txt', mode='wb') as f:
        f.write(res.content)

之前只是簡單的捕獲了異常,出現(xiàn)異常則統(tǒng)一提示信息即可。如果想要對異常進行更加細致的異常處理,則可以這樣來做:

import requests
from requests import exceptions
 
while True:
    url = input("請輸入要下載網(wǎng)頁地址:")
    try:
        res = requests.get(url=url)
        print(res)    
    except exceptions.MissingSchema as e:
        print("URL架構(gòu)不存在")
    except exceptions.InvalidSchema as e:
        print("URL架構(gòu)錯誤")
    except exceptions.InvalidURL as e:
        print("URL地址格式錯誤")
    except exceptions.ConnectionError as e:
        print("網(wǎng)絡(luò)連接錯誤")
    except Exception as e:
        print("代碼出現(xiàn)錯誤", e)
        
# 提示:如果想要寫的簡單一點,其實只寫一個Exception捕獲錯誤就可以了

如果想要對錯誤進行細分的處理,例如:發(fā)生Key錯誤和發(fā)生Value錯誤分開處理。

try:
    # 邏輯代碼
    pass
 
except KeyError as e:
    # 小兵,只捕獲try代碼中發(fā)現(xiàn)了鍵不存在的異常,例如:去字典 info_dict["n1"] 中獲取數(shù)據(jù)時,鍵不存在。
    print("KeyError")
 
except ValueError as e:
    # 小兵,只捕獲try代碼中發(fā)現(xiàn)了值相關(guān)錯誤,例如:把字符串轉(zhuǎn)整型 int("無誒器")
    print("ValueError")
 
except Exception as e:
    # 王者,處理上面except捕獲不了的錯誤(可以捕獲所有的錯誤)。
    print("Exception")

Python中內(nèi)置了很多細分的錯誤,供你選擇。

常見異常:
"""
AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x
IOError 輸入/輸出異常;基本上是無法打開文件
ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤
IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊
IndexError 下標(biāo)索引超出序列邊界,比如當(dāng)x只有三個元素,卻試圖訪問n x[5]
KeyError 試圖訪問字典里不存在的鍵 inf['xx']
KeyboardInterrupt Ctrl+C被按下
NameError 使用一個還未被賦予對象的變量
SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了)
TypeError 傳入對象類型與要求的不符合
UnboundLocalError 試圖訪問一個還未被設(shè)置的局部變量,基本上是由于另有一個同名的全局變量,
導(dǎo)致你以為正在訪問它
ValueError 傳入一個調(diào)用者不期望的值,即使值的類型是正確的
"""
更多異常:
"""
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError
"""

1.2 自定義異常拋出異常

上面都是Python內(nèi)置的異常,只有遇到特定的錯誤之后才會拋出相應(yīng)的異常。

其實,在開發(fā)中也可以自定義異常。

class MyException(Exception):
    pass
try:
    pass
except MyException as e:
    print("MyException異常被觸發(fā)了", e)
except Exception as e:
    print("Exception", e)

上述代碼在except中定義了捕獲MyException異常,但他永遠不會被觸發(fā)。因為默認的那些異常都有特定的觸發(fā)條件,例如:索引不存在、鍵不存在會觸發(fā)IndexError和KeyError異常。

對于我們自定義的異常,如果想要觸發(fā),則需要使用:raise MyException()類實現(xiàn)。

class MyException(Exception):
    pass
 
 
try:
    # 。。。
    raise MyException()
    # 。。。
except MyException as e:
    print("MyException異常被觸發(fā)了", e)
except Exception as e:
    print("Exception", e)
class MyException(Exception):
    def __init__(self, msg, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.msg = msg
 
 
try:
    raise MyException("xxx失敗了")
except MyException as e:
    print("MyException異常被觸發(fā)了", e.msg)
except Exception as e:
    print("Exception", e)
class MyException(Exception):
    title = "請求錯誤"
 
 
try:
    raise MyException()
except MyException as e:
    print("MyException異常被觸發(fā)了", e.title)
except Exception as e:
    print("Exception", e)

案例一:你我合作協(xié)同開發(fā),你調(diào)用我寫的方法。

我定義了一個函數(shù)

class EmailValidError(Exception):
    title = "郵箱格式錯誤"
 
class ContentRequiredError(Exception):
    title = "文本不能為空錯誤"
    
def send_email(email,content):
    if not re.match("\w+@live.com",email):
        raise EmailValidError()
	if len(content) == 0 :
        raise ContentRequiredError()
	# 發(fā)送郵件代碼...
    # ...

你調(diào)用我寫的函數(shù)

def execute():
    # 其他代碼
    # ...
    
	try:
        send_email(...)
    except EmailValidError as e:
        pass
    except ContentRequiredError as e:
        pass
    except Exception as e:
        print("發(fā)送失敗")
 
execute()
 
# 提示:如果想要寫的簡單一點,其實只寫一個Exception捕獲錯誤就可以了。

案例二:在框架內(nèi)部已經(jīng)定義好,遇到什么樣的錯誤都會觸發(fā)不同的異常。

import requests
from requests import exceptions
 
while True:
    url = input("請輸入要下載網(wǎng)頁地址:")
    try:
        res = requests.get(url=url)
        print(res)    
    except exceptions.MissingSchema as e:
        print("URL架構(gòu)不存在")
    except exceptions.InvalidSchema as e:
        print("URL架構(gòu)錯誤")
    except exceptions.InvalidURL as e:
        print("URL地址格式錯誤")
    except exceptions.ConnectionError as e:
        print("網(wǎng)絡(luò)連接錯誤")
    except Exception as e:
        print("代碼出現(xiàn)錯誤", e)
        
# 提示:如果想要寫的簡單一點,其實只寫一個Exception捕獲錯誤就可以了。

案例三:按照規(guī)定去觸發(fā)指定的異常,每種異常都具備被特殊的含義。

1.4 特殊的finally

try:
    # 邏輯代碼
except Exception as e:
    # try中的代碼如果有異常,則此代碼塊中的代碼會執(zhí)行。
finally:
    # try中的代碼無論是否報錯,finally中的代碼都會執(zhí)行,一般用于釋放資源。
 
print("end")

當(dāng)在函數(shù)或方法中定義異常處理的代碼時,要特別注意finally和return

def func():
    try:
        return 123
    except Exception as e:
        pass
    finally:
        print(666)
        
func()

在try或except中即使定義了return,也會執(zhí)行最后的finally塊中的代碼。

二、反射

反射,提供了一種更加靈活的方式讓你可以實現(xiàn)去 對象 中操作成員(以字符串的形式去 對象 中進行成員的操作)。

class Person(object):
    
    def __init__(self,name,wx):
        self.name = name
        self.wx = wx
	
    def show(self):
        message = "姓名{},微信:{}".format(self.name,self.wx)
        
        
user_object = Person("華青水上","hqss666")
 
 
# 對象.成員 的格式去獲取數(shù)據(jù)
user_object.name
user_object.wx
user_object.show()
 
# 對象.成員 的格式無設(shè)置數(shù)據(jù)
user_object.name = "華青水上"
user = Person("華青水上","hqss666")
 
# getattr 獲取成員
getattr(user,"name") # user.name
getattr(user,"wx")   # user.wx
 
 
method = getattr(user,"show") # user.show
method()
# 或
getattr(user,"show")()
 
# setattr 設(shè)置成員
setattr(user, "name", "華青水上") # user.name = "華青水上"

Python中提供了4個內(nèi)置函數(shù)來支持反射:

getattr,去對象中獲取成員

v1 = getattr(對象,"成員名稱")
v2 = getattr(對象,"成員名稱", 不存在時的默認值)

setattr,去對象中設(shè)置成員

setattr(對象,"成員名稱",值)

hasattr,對象中是否包含成員

v1 = hasattr(對象,"成員名稱") # True/False

delattr,刪除對象中的成員

delattr(對象,"成員名稱")

以后如果再遇到 對象.成員 這種編寫方式時,均可以基于反射來實現(xiàn)。

class Account(object):
 
    def login(self):
        pass
 
    def register(self):
        pass
 
    def index(self):
        pass
 
    
def run(self):
    name = input("請輸入要執(zhí)行的方法名稱:") # index register login xx run ..
    
    account_object = Account()
    method = getattr(account_object, name,None) # index = getattr(account_object,"index")
    
    if not method:
        print("輸入錯誤")
        return 
    method()

2.1 一些皆對象

在Python中有這么句話:一切皆對象。 每個對象的內(nèi)部都有自己維護的成員。

對象是對象

class Person(object):
    
    def __init__(self,name,wx):
        self.name = name
        self.wx = wx
	
    def show(self):
        message = "姓名{},微信:{}".format(self.name,self.wx)
        
        
user_object = Person("華青水上","hqss666")
user_object.name

類是對象

class Person(object):
    title = "武沛齊"
 
Person.title
# Person類也是一個對象(平時不這么稱呼)

模塊是對象

import re
 
re.match
# re模塊也是一個對象(平時不這么稱呼)。

由于反射支持以字符串的形式去對象中操作成員【等價于 對象.成員 】,所以,基于反射也可以對類、模塊中的成員進行操作。

簡單粗暴:只要看到 xx.oo 都可以用反射實現(xiàn)。

class Person(object):
    title = "華青水上"
 
v1 = Person.title
print(v1)
v2 = getattr(Person,"title")
print(v2)
import re
 
v1 = re.match("\w+","dfjksdufjksd")
print(v1)
 
func = getattr(re,"match")
v2 = func("\w+","dfjksdufjksd")
print(v2)

2.2 import_module + 反射

# 導(dǎo)入模塊
from importlib import import_module
 
m = import_module("random")
 
v1 = m.randint(1,100)

在Python中如果想要導(dǎo)入一個模塊,可以通過import語法導(dǎo)入;企業(yè)也可以通過字符串的形式導(dǎo)入。

示例一:

# 導(dǎo)入模塊
import random
 
v1 = random.randint(1,100)

示例二:

# 導(dǎo)入模塊exceptions
from requests import exceptions as m
# 導(dǎo)入模塊exceptions
from importlib import import_module
m = import_module("requests.exceptions")

示例三:

# 導(dǎo)入模塊exceptions,獲取exceptions中的InvalidURL類。
from requests.exceptions import InvalidURL
# 錯誤方式
from importlib import import_module
m = import_module("requests.exceptions.InvalidURL") # 報錯,import_module只能導(dǎo)入到模塊級別
# 導(dǎo)入模塊
from importlib import import_module
m = import_module("requests.exceptions")
# 去模塊中獲取類
cls = m.InvalidURL

在很多項目的源碼中都會有 import_modulegetattr 配合實現(xiàn)根據(jù)字符串的形式導(dǎo)入模塊并獲取成員,例如:

from importlib import import_module
 
path = "openpyxl.utils.exceptions.InvalidFileException"
 
module_path,class_name = path.rsplit(".",maxsplit=1) # "openpyxl.utils.exceptions"   "InvalidFileException"
 
module_object = import_module(module_path)
 
cls = getattr(module_object,class_name)
 
print(cls)

我們在開發(fā)中也可以基于這個來進行開發(fā),提高代碼的可擴展性。

至此Python進階中面向?qū)ο笾惓L幚砼c反射總結(jié)完畢,如有不當(dāng)之處,歡迎指正!

到此這篇關(guān)于Python異常處理與反射相關(guān)問題總結(jié)的文章就介紹到這了,更多相關(guān)Python異常處理與反射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 一文搞懂python異常處理、模塊與包
  • Python異常處理中容易犯得錯誤總結(jié)
  • Python打包exe時各種異常處理方案總結(jié)
  • python基礎(chǔ)之文件操作和異常處理
  • Python Selenium異常處理的實例分析
  • Python pip install之SSL異常處理操作
  • 通過實例了解Python異常處理機制底層實現(xiàn)
  • Python異常處理機制結(jié)構(gòu)實例解析
  • python異常處理之try finally不報錯的原因
  • python except異常處理之后不退出,解決異常繼續(xù)執(zhí)行的實現(xiàn)
  • python異常處理和日志處理方式
  • Python Django中間件,中間件函數(shù),全局異常處理操作示例
  • Python 異常處理總結(jié)

標(biāo)簽:長春 泉州 清遠 安慶 岳陽 吉林 洛陽 怒江

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python異常處理與反射相關(guān)問題總結(jié)》,本文關(guān)鍵詞  Python,異常,處理,與,反射,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python異常處理與反射相關(guān)問題總結(jié)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python異常處理與反射相關(guān)問題總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    午夜欧美2019年伦理| 中文av一区二区| 亚洲h在线观看| 久久精品欧美一区二区三区不卡| 精品视频一区二区不卡| 黄色成人免费在线| 丝袜美腿高跟呻吟高潮一区| 亚洲麻豆国产自偷在线| 宅男在线国产精品| 欧美久久久久免费| 日韩二区三区在线观看| 日本午夜精品视频在线观看| 成人午夜电影网站| 午夜欧美电影在线观看| 欧美肥大bbwbbw高潮| 国产99一区视频免费| 久久精品二区亚洲w码| 亚洲成a天堂v人片| 天堂av在线一区| 久久国内精品自在自线400部| 亚洲高清免费在线| 中文字幕在线不卡一区 | 国产亚洲精品超碰| 久久午夜羞羞影院免费观看| 欧美三区免费完整视频在线观看| 亚洲免费在线看| 精品一区二区三区欧美| 99久精品国产| 欧美高清www午色夜在线视频| 欧美日韩一区二区三区不卡| 欧美成人三级在线| 日韩一区二区高清| 欧美日本韩国一区| 日韩三级中文字幕| eeuss鲁片一区二区三区| 蜜桃av一区二区三区| 不卡高清视频专区| 欧美精品在线一区二区三区| 久久亚洲精华国产精华液| 黄色小说综合网站| 不卡视频一二三| 精品少妇一区二区三区免费观看 | 色婷婷国产精品久久包臀 | 国产亚洲欧洲一区高清在线观看| 日韩av一区二| 亚洲激情第一区| 中文字幕av一区 二区| 亚洲视频在线一区二区| 欧美一区二区三区婷婷月色| 欧美精品777| 日韩精品一区二区三区中文精品 | 成人精品在线视频观看| 91精品福利在线一区二区三区 | 粉嫩av亚洲一区二区图片| 欧美另类高清zo欧美| 欧美日韩和欧美的一区二区| 欧美午夜片在线看| 亚洲激情综合网| 国产成人免费视频网站| 欧美日韩一区二区在线观看视频| 久久久久久久综合| 日韩黄色免费电影| 国产精品一区二区你懂的| 懂色中文一区二区在线播放| 精品成人免费观看| 免费看欧美女人艹b| 久久av中文字幕片| 在线综合视频播放| 日本一区二区三区免费乱视频| 久草在线在线精品观看| 国产精品看片你懂得| 成人动漫在线一区| 亚洲综合免费观看高清完整版在线| 亚洲一区二区精品视频| 精品制服美女久久| 色婷婷狠狠综合| 国产乱对白刺激视频不卡| 亚洲三级在线观看| 不卡的av中国片| 亚洲欧美日韩国产成人精品影院| 成人午夜免费电影| **欧美大码日韩| 91久久国产最好的精华液| 在线成人av网站| 久久精品久久久精品美女| 国产一区二区福利视频| 欧美男同性恋视频网站| 日本特黄久久久高潮| 欧美色图激情小说| 欧美国产国产综合| 欧美精品久久一区| 国产一区二区三区观看| 色综合久久六月婷婷中文字幕| 捆绑调教美女网站视频一区| 一本色道综合亚洲| 日本电影欧美片| jvid福利写真一区二区三区| 国产一区二区三区黄视频 | 欧美α欧美αv大片| 麻豆精品在线播放| 中文字幕欧美三区| 欧美三级乱人伦电影| 成人性生交大片免费看视频在线| 亚洲大片免费看| 国产精品久久久久久久久果冻传媒| 欧美日韩国产影片| 国模套图日韩精品一区二区| 欧美极品aⅴ影院| 国产成人综合在线播放| 久久久久久黄色| 色婷婷一区二区三区四区| 91在线精品秘密一区二区| 看电影不卡的网站| 午夜精品免费在线观看| 亚洲少妇最新在线视频| 国产精品国产自产拍高清av王其| 国产精品嫩草久久久久| 精品久久免费看| 欧美久久婷婷综合色| 欧美高清激情brazzers| 日本国产一区二区| 视频一区二区国产| 亚洲女人****多毛耸耸8| 久久精品一区二区三区不卡 | 日韩成人av影视| 亚洲乱码精品一二三四区日韩在线| 一区二区三区视频在线观看 | 国产精品99久久久久久宅男| 黑人巨大精品欧美黑白配亚洲| 狠狠色狠狠色综合日日91app| 亚洲婷婷综合色高清在线| 亚洲欧美激情一区二区| 午夜一区二区三区视频| 日本三级亚洲精品| 久久99精品久久久久久| 精品一二三四区| 99re亚洲国产精品| 欧美美女网站色| 欧美一区中文字幕| 亚洲欧洲一区二区在线播放| 亚洲色图一区二区三区| 国产欧美一区二区三区在线看蜜臀| 国产精品国产三级国产普通话99 | 久久综合久久鬼色中文字| 国产精品久久久久久久第一福利 | 国产人妖乱国产精品人妖| 亚洲人xxxx| 日本午夜一本久久久综合| 另类的小说在线视频另类成人小视频在线 | 在线精品观看国产| 欧美高清在线精品一区| 懂色av一区二区夜夜嗨| 亚洲成人在线网站| 欧美一区二区三区在线观看视频 | gogogo免费视频观看亚洲一| 亚洲成人av资源| 欧美草草影院在线视频| 欧美三级资源在线| 色av综合在线| 日本一区二区在线不卡| 日日摸夜夜添夜夜添亚洲女人| 激情综合色丁香一区二区| 国产精品18久久久久久久久久久久 | 欧洲精品视频在线观看| 日韩免费电影一区| 成人激情综合网站| 国产精品素人视频| 色哟哟日韩精品| 国产精品久久久久久久久果冻传媒| 欧美影院一区二区三区| 亚洲高清免费在线| 亚洲精品一区二区三区香蕉| 五月婷婷综合网| 中文字幕在线不卡一区| 欧美日韩一本到| 激情小说亚洲一区| 日韩欧美一区电影| 91久久精品一区二区| 久久中文娱乐网| 午夜不卡在线视频| 美日韩一级片在线观看| 99久久婷婷国产综合精品电影| 在线观看亚洲a| 国产日韩欧美制服另类| 亚洲国产乱码最新视频 | 久久精品免费看| 国产综合色精品一区二区三区| 亚洲国产精品一区二区www在线| 成人性生交大片免费看视频在线| 中文字幕 久热精品 视频在线| 亚洲精品五月天| 在线观看欧美黄色| 免费在线观看日韩欧美| 一区二区成人在线视频| 精品国产人成亚洲区| 色网站国产精品| 天堂在线一区二区| 性欧美疯狂xxxxbbbb| 中文字幕日韩一区| 久久蜜桃一区二区|