版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
匯報人:WPSPython程序設(shè)計基礎(chǔ)第八章處理異常目錄01異常的基礎(chǔ)知識02異常的種類03主動拋出異常04Python生態(tài)系統(tǒng)之shutil庫目錄06拓展實踐:給程序做個彩超07本章小結(jié)05小試牛刀理解異常。掌握異常處理的相關(guān)語句。了解異常的分類。了解匿名函數(shù)的使用方法。掌握
enumerate()函數(shù)的使用方法。在日常生活中每個人都希望從不生病,然而生病卻是不可避免的。在程序編寫的過程中人們也
希望不要出現(xiàn)任何異常,但異常也是不可避免的。正如生病了要治病,出現(xiàn)異常就需要處理異常。
本章將介紹什么是異常及處理異常的相關(guān)語句。學(xué)習(xí)目標PART18.1異常的基礎(chǔ)知識異常是程序在運行過程中由于各種硬件故障(如網(wǎng)絡(luò)中斷,文件不存在等)、軟件設(shè)計錯誤(如
引用不存在的索引)等原因?qū)е碌某绦蝈e誤,這些錯誤通常會終止程序的運行,使程序崩潰。程序員在編寫程序時當然希望避開所有的異常,但由于程序的運行環(huán)境、用戶的操作行為等因
素都不是程序員可以控制的,所以異常也是不可避免的。例如,代碼8.1
接收用戶輸入的兩個數(shù)并
輸出相除結(jié)果,但即便如此簡單的一段程序,也有可能出現(xiàn)意外情形而導(dǎo)致異常。代碼
8.1
認識異常在用戶完全按要求輸入時,程序可以正常執(zhí)行并輸出結(jié)果。但如果用戶輸入的不是數(shù)字而是字
母如
a,則會出現(xiàn)
ValueError異常,錯誤信息如下。如果用戶輸入的是數(shù)字,但在輸入除數(shù)時輸入了
0,則會出現(xiàn)
ZeroDivisionError異常,錯誤信
息如下。如果程序在用戶的輸入不合預(yù)期時就直接崩潰,這樣的程序太脆弱,缺乏穩(wěn)健性和可用性。為了提高程序的穩(wěn)健性,需要某種機制來對異常進行妥善的處理,使程序不會輕易崩潰。8.1.1異常的概念a=float(input('請輸入被除數(shù):'))b=float(input('請輸入除數(shù)(非
0):'))print("二者的商為",a/b)ValueError:couldnotconvert
stringto
float:
'a'ZeroDivisionError:floatdivisionby
zeroPython針對異常處理的基本策略是使用
try、except等關(guān)鍵字,形成如下的一個結(jié)構(gòu)。
處理異常的基本語法形式try-except結(jié)構(gòu)的工作原理如下:將有可能產(chǎn)生異常的代碼書寫在
try語句塊中,如果這段代碼執(zhí)行時一切順利,則后面的各
except語句塊就像不存在一樣。如果
try
語句塊的代碼執(zhí)行時出現(xiàn)了某種異常,則根據(jù)異常的類型會激發(fā)相應(yīng)的
except分支下的代碼,或者說異常被相應(yīng)的except分支捕獲。這里“捕獲”的含義是指不要將異常報告給最終用戶,從而導(dǎo)致程序崩潰,而是在出現(xiàn)某種異常時,
執(zhí)行對應(yīng)的
except下的異常處理代碼,這段異常處理代碼負責(zé)對該類型的異常進行妥善的處理。因此
一個try
語句后可以有多個
except
語句,用來捕獲可能產(chǎn)生的多種類型的異常,如代碼
8.2所示。代碼
8.2
使用
try-except進行異常處理8.1.2異常處理的語法結(jié)構(gòu)try:可能引發(fā)異常的代碼except
異常類型名稱
1:異常處理代碼
1except
異常類型名稱
2:異常處理代碼
2try:a=float(input('請輸入被除數(shù):'))b=float(input('請輸入除數(shù)(非
0):'))print("二者的商為",a/b)exceptZeroDivisionError:print("除數(shù)不能為
0")exceptValueError:print("請輸入數(shù)字")經(jīng)過
try-except結(jié)構(gòu)的改造后,這段代碼在用戶輸入不合要求的數(shù)據(jù)時就不會輕易崩潰了。如果
用戶輸入字母等無法轉(zhuǎn)換為數(shù)值型的內(nèi)容,則程序會提示用戶“請輸入數(shù)字”。如果除數(shù)輸入了
0,
則程序會提示“除數(shù)不能為0”。無論哪一種情形,程序都會給出合理的交互信息而不是粗暴地崩潰,這極大地增強了程序的穩(wěn)健性。代碼
8.2
的運行結(jié)果如下所示。處理異常的
try、except語句還可以搭配
as、finally等關(guān)鍵字,形成更完備的異常處理結(jié)構(gòu)。下
面看代碼
8.3,這段代碼假設(shè)在指定位置有一個number_div.txt文件,該文件的每一行都是以冒號分隔的兩個數(shù)值,程序的目的是計算得出每一行兩個數(shù)值相除的結(jié)果。代碼在
try語句塊后面預(yù)備了
4
個
except
語句塊,并且最后還有一個
finally
語句塊。無論
try
語句塊的代碼是否出現(xiàn)異常,finally
語句塊的代碼都是要執(zhí)行的。因此
finally語句塊的代碼經(jīng)常用來做一些必需的善后工作,如代碼
8.3
中關(guān)閉已打開的文件。8.1.2異常處理的語法結(jié)構(gòu)請輸入被除數(shù):46請輸入除數(shù)(非
0):0除數(shù)不能為
0請輸入被除數(shù):45ada請輸入數(shù)字代碼
8.3使用
try-except-finally結(jié)構(gòu)處理異常8.1.2異常處理的語法結(jié)構(gòu)f_obj=Nonetry:f_obj=open("file/number_div.txt","r")content=f_obj.readlines()forline
in
content:numbers=line.split(":")print(float(numbers[0])/float(numbers[1]))print("計算完畢。")exceptZeroDivisionError:print("除數(shù)不能為
0")exceptValueErrorase:err_msg=
str(e)loc=err_msg.find(":")print("文件中出現(xiàn)非數(shù)值內(nèi)容:",err_msg[loc+1:])exceptFileNotFoundErrorase:err_msg=
str(e)loc=err_msg.find(":")print(f"指定的文件
{err_msg[loc+1:]}
不存在")except:print("出現(xiàn)未知錯誤")finally:if
f_obj
!=None:f_obj.close()print("謝謝使用,再見")仔細觀察這段代碼中出現(xiàn)的
4個
except語句塊,會發(fā)現(xiàn)最后一個
except沒有指明要捕獲的異常
類型,這意味著除前
3個
except語句塊所處理的異常類型外,程序出現(xiàn)的所有其他類型異常都由最
后的
except語句塊處理。因此這樣的
except必須位于眾多
except語句塊的最后。另外,第
2和第
3個
except語句使用
as關(guān)鍵字為捕獲的異常對象命名為
e,這樣做的優(yōu)點是可
以通過名稱訪問捕獲的異常對象,從而進行更多的處理操作。例如,代碼
8.3就將捕獲的名稱為e
的異常對象通過str()函數(shù)轉(zhuǎn)換為字符串,這個字符串描述了錯誤的信息,其中會出現(xiàn)一個冒號,冒
號后的文本往往是引起異常的源頭。因此程序找到這部分文本將其輸出,以便給用戶更多、更有價
值的錯誤信息。最后的
finally語句塊是無論發(fā)不發(fā)生異?;虬l(fā)生何種異常都要執(zhí)行的代碼段。這里用來關(guān)閉打
開的文件,防止在處理文件內(nèi)部數(shù)據(jù)的過程中出現(xiàn)異常,程序終止運行來不及關(guān)閉文件的情形發(fā)生。
但如果是由于文件路徑等問題導(dǎo)致
open()函數(shù)的執(zhí)行出現(xiàn)異常,文件并沒有成功打開,代碼中
f_obj
變量的值會是None,此時就無須關(guān)閉文件了。代碼
8.3
的運行結(jié)果取決于實際情形。如果指定的文件不存在,則運行效果如下。如果文件打開沒有問題,但內(nèi)部數(shù)據(jù)有非數(shù)值內(nèi)容,則運行結(jié)果如下。其中的“ad”就是文件
中引起異常的文本內(nèi)容。如果文件中的數(shù)據(jù)符合要求,一切順利,則運行結(jié)果如下??梢姛o論何種情形,finally的代碼都被執(zhí)行了,“謝謝使用,再見”的字樣總會出現(xiàn)在運行結(jié)
果中。如果將
try語句塊中進行類型轉(zhuǎn)換的
float()函數(shù)去掉,則會出現(xiàn)前
3個
except語句塊都無法捕獲的異常,此時就可以看到第
4個
except語句塊的效力了。8.1.2異常處理的語法結(jié)構(gòu)指定的文件'file/number_div.txt'
不存在謝謝使用,再見文件中出現(xiàn)非數(shù)值內(nèi)容:
'ad'謝謝使用,再見7.65計算完畢。謝謝使用,再見PART28.2異常的種類前面的例子涉及了幾種Python
常見的異常類型,
如ZeroDivisionError
、ValueError
及
FileNotFoundError等。它們都是
Python
內(nèi)置的異常類型,此外,Python
內(nèi)置的異常種類還有很多,
下面簡單介紹幾個。(
1
)NameError:當程序嘗試訪問一個未定義的變量時會引發(fā)NameError異常。例如,如果將
代碼
8.3
中第
1行的
f_obj定義改為注釋,當
open()函數(shù)要打開的文件不存在時,最后的
finally語句
塊中的
f_obj變量就會觸發(fā)NameError異常。(2)IndexError:當引用序列中不存在的索引時,會引發(fā)
IndexError異常。例如,在一個只有
5
個元素的列表中要訪問
5或更大的索引序號時就會觸發(fā)這種異常。(3)KeyError:當使用映射中不存在的鍵時,會引發(fā)Keyerror異常。例如,訪問字典中不存在
的鍵時,就會帶來這種問題。(4)AttributeError:當嘗試訪問未知的對象屬性時,會引發(fā)AttributeError
異常。例如,變量a
的類型是整型,在沒有將其轉(zhuǎn)換為字符串的情形下卻要調(diào)用a.find()方法,就會出現(xiàn)“AttributeError:'int'
objecthasnoattribute'find'”的錯誤信息。8.2.1內(nèi)置的常見異常種類(5)SyntaxError:當
Python解釋器發(fā)現(xiàn)語法錯誤時,會引發(fā)
SyntaxError異常。(6)FileNotFoundError:當使用
open()函數(shù)試圖打開不存在的文件時,會引發(fā)
FileNotFoundError
異常。這個異常在代碼8.3中已經(jīng)涉及了。找不到文件的原因可能是提供了錯誤的文件名,如將
readme.txt錯誤地拼寫為readwe.txt;也可能是路徑分隔符與
Python字符串的轉(zhuǎn)義符相沖突造成的。
無論是什么原因?qū)е碌?,只要?/p>
open()函數(shù)放在
try語句塊中,再配合捕獲
FileNotFoundError類型的
except語句塊即可妥善處理這類異常。Python
內(nèi)置的異常種類很多,這里無法一一講解,但它們都有共同的特征,是更廣泛意義上的
同一類對象。實際上
Python
中所有的異常都是對象,因此
except分支中可以使用
as關(guān)鍵字為捕獲
的異常對象命名。每一個異常對象都有其從屬的類別,這個類別又有大與小之分,如除數(shù)為
0
激發(fā)
的異常對象屬于
ZeroDivisionError類,也屬于更大范圍的
ArithmeticError類,當然還屬于Exception
類。這就好比一只貓是一個具體的動物,它屬于貓科,也可以說它屬于哺乳動物類,還可以說它屬于動物類。由此可見,Exception類在
Python異常的類別組成中占有重要地位。8.2.1內(nèi)置的常見異常種類實際上
Python
中“至高無上”的異常類是
BaseException類,它是所有異常的基類。它又包括
4
個子類:SystemExit、KeyboardInterrupt、GeneratorExit、Exception。其中,
最重要的是
Exception類,
它是所有常規(guī)異常的基類,之前講到的常見的異常類型都是
Exception類的子類。程序員如果要自定
義異常,則也需要以
Exception類為父類(類是面向?qū)ο缶幊痰幕靖拍?,有關(guān)父類、子類的含義可參閱第
10章)。雖然使用
Exception類可以捕獲所有常規(guī)異常,但是對于所有異常都使用同一段代碼處理的話,
會使對異常的處理過于粗糙。通常情況下,應(yīng)該盡可能使異常處理的粒度細化,以保證每種異常有
合適的處理方式。因此在except分支中使用Exception
類捕獲異常應(yīng)該作為一種后備的異常處理方式。
換句話說,在
except分支中使用
Exception類的效果類似于在
except分支中不指明異常分類。當然,
嚴格說來二者還是有區(qū)別的,畢竟不是所有的異常都屬于
Exception類。8.2.2Exception異常類盡管
Python提供了相當豐富的異常類型,但有時為了處理特定的業(yè)務(wù)邏輯,如某個軟件應(yīng)用所
特有的運行錯誤,需要根據(jù)程序的邏輯在程序中自行定義需要的異常類和異常對象。Python要求程序自行定義的異常類必須繼承
Exception
類或其他某個
Exception類的子類。換句
話說,自定義異常類必須以Exception
類為基類。通常的做法是先為自己的程序創(chuàng)建一個派生自
Exception類的自定義異常類,然后從此自定義異常類派生其他異常類。這樣不但清晰明了,也方便
管理,如代碼
8.4所示。有關(guān)類的定義與繼承的語法會在第
10章中進行介紹。代碼
8.4自定義異常類示意由于大多數(shù)
Python
內(nèi)置異常的名稱都以“Error”結(jié)尾,所以自定義異常類并對類進行命名時要
遵循同樣的風(fēng)格。8.2.3自定義異常類classMyError(Exception):#MyError類是
Exception類的子類passclassAError(MyError):#AError類是MyError類的子類passclassBError(MyError):#BError類是MyError類的子類passPART38.3主動拋出異常某些情形下,程序運行時也可以主動拋出異常。這種異常一般不是指發(fā)生了內(nèi)存溢出、列表索
引越界等系統(tǒng)級異常,而是程序在執(zhí)行過程中發(fā)生了不符合業(yè)務(wù)邏輯的情形,主要使用的多是用戶自定義異常。主動拋出異常一般可以使用raise語句和
assert語句。代碼
8.3從指定的文件number_div.txt
中讀取數(shù)據(jù),然后進行相應(yīng)的處理。代碼考慮了很多異常
情形,如文件不存在、除數(shù)為0、文本無法轉(zhuǎn)換為數(shù)值等。這些錯誤一旦發(fā)生,如果不加處理的話
程序就都會崩潰。如果指定文件內(nèi)部沒有任何數(shù)據(jù)呢?這時在業(yè)務(wù)邏輯上已經(jīng)與預(yù)期不一致了,但程序運行時并
不會報錯、崩潰。如果不進行顯式的處理,則很有可能會忽略這種不正常的情形。因此可以將這種
情形定義為一種異常,遇到后主動拋出異常,引起外界注意并進行后期處理。代碼8.5
演示了自定義異常類型并使用
raise語句拋出該異常,注意其中粗體顯示的代碼。8.3.1使用raise語句上報異常代碼
8.5
使用
raise語句拋出異常8.3.1寫入文本文件classNoDataError(Exception):#自定義的異常類型,當文件中沒有數(shù)據(jù)時觸發(fā)passf_obj=Nonetry:f_obj=open("file/number_div.txt","r")content=f_obj.readlines()iflen(content)==0:raiseNoDataError("文件沒有數(shù)據(jù)!")forline
in
content:numbers=line.split(":")print(float(numbers[0])/float(numbers[1]))print("計算完畢。")exceptNoDataErrorase:
#捕獲
raise語句拋出的異常print(e)exceptZeroDivisionError:print("除數(shù)不能為
0")exceptValueErrorase:err_msg=
str(e)loc=err_msg.find(":")print("文件中出現(xiàn)非數(shù)值內(nèi)容:",err_msg[loc+1:])exceptFileNotFoundErrorase:err_msg=
str(e)loc=err_msg.find(":")print(f"指定的文件
{err_msg[loc+1:]}
不存在")except:print("出現(xiàn)未知錯誤")finally:if
f_obj
!=None:f_obj.close()print("謝謝使用,再見")當指定文件為空文件時,代碼
8.5
的運行結(jié)果如下。文件沒有數(shù)據(jù)!謝謝使用,再見程序編寫完成后都要經(jīng)過大量的調(diào)試,去除各種潛藏的“bug”,這個過程被稱為
debug。在調(diào)
試過程中,如果程序運行狀態(tài)已經(jīng)與某種預(yù)期不符,則程序應(yīng)該及時匯報出現(xiàn)的問題。這可以通過
assert語句實現(xiàn)。assert語句也稱為斷言語句,它可以指明程序邏輯預(yù)期應(yīng)該滿足的條件,當程序?qū)?/p>
際運行沒有滿足該條件時會觸發(fā)
AssertionError異常。assert語句的用法如下。當程序應(yīng)滿足的條件表達式結(jié)果為真時,不會拋出異常。當程序運行不滿足條件表達式時,會
引發(fā)
AssertionError異常。其中第
2項的描述信息是可選的,一般是一個字符串,用于描述異常信息。8.3.2使用assert語句調(diào)試程序assert
應(yīng)滿足的條件表達式,不滿足時的描述信息通過設(shè)置異常信息,就可以及時發(fā)現(xiàn)程序運行與預(yù)期不符之處,從而查找原因、改進代碼。下面看代碼
8.6
的演示。代碼
8.6
使用
assert語句調(diào)試程序8.3.2使用assert語句調(diào)試程序f_obj=open("file/number_div.txt","r")content=f_obj.readlines()try:forline
in
content:numbers=line.split(":")
#中文冒號,與文件使用的英文冒號不符assertlen(numbers)==2,"數(shù)據(jù)行拆分不正確!"print(float(numbers[0])/float(numbers[1]))print("計算完畢。")exceptAssertionErrorase:print(e)f_obj.close()print("謝謝使用,再見")這段代碼在進行數(shù)據(jù)行以冒號為標志拆分時,誤將文件使用的英文冒號書寫為中文冒號,因此
會導(dǎo)致拆分失敗。這個小錯誤不仔細看不容易發(fā)現(xiàn)。但如果在拆分后添加assert
斷言,判斷拆分得到的
numbers列表長度是否為
2。如果不是預(yù)期的
2,就會激發(fā)
AssertionError異常,該異常的描述信息是由
assert語句的第
2個參數(shù)指定的。異常被
except語句捕獲后,異常處理語句輸出“數(shù)據(jù)行
拆分不正確!”,這樣就知道程序運行的故障在哪里,有的放矢地去改進代碼。程序最后調(diào)試完成后,這些
assert語句都應(yīng)該從最終版本的程序代碼中去除。當然,即使有assert
語句,有其他各種調(diào)試功能的幫助,程序員也無法保證代碼執(zhí)行時不出現(xiàn)異常,沒有bug。用平和的心態(tài)對待異常,盡可能地預(yù)備好
except分支的代碼,設(shè)置好各種預(yù)案,異常就沒有那么可怕了。PART48.4Python生態(tài)系統(tǒng)之shutil庫為了完成下面的演示,假設(shè)代碼文件存在于子文件夾
test1和
test2
中,而
test1文件夾下有一個
read_me.txt文件。代碼
8.7演示了各種情形下
copy()函數(shù)的工作結(jié)果。其中,Windows路徑分隔符“\”
每一個都要書寫兩遍。代碼
8.7
使用
copy()函數(shù)復(fù)制文件代碼中的路徑使用的是相對路徑,點代表當前路徑。其實換成以盤符開頭的絕對路徑道理是一
樣的。關(guān)鍵在于目標位置的文件夾要事先存在,否則就會像代碼中最后一行的情形,這是因為目標
路徑的
read文件夾不存在而無法完成文件的復(fù)制。8.4.1使用copy()函數(shù)復(fù)制文件import
shutil#指明原文件,目標文件名shutil.copy('.\\test1\\read_me.txt','.\\test1\\read.txt')#目標文件名未指定,就使用原文件名shutil.copy('.\\test1\\read_me.txt','.\\test2\\')#test2
文件夾存在,但
test2
文件夾復(fù)制下沒有me
文件夾#此時me
為目標文件名,原文件被復(fù)制到
test2
文件夾下,名為me,沒有擴展名shutil.copy('.\\test1\\read_me.txt','.\\test2\\me')#目標路徑的
read
文件夾不存在,報錯shutil.copy('.\\test1\\read_me.txt','.\\read\\me')
#errorcopy()函數(shù)雖然可以將文件復(fù)制到指定的目標位置,但原文件的一些元數(shù)據(jù)(如原文件的訪問時
間、修改時間等信息)會丟失。如果不僅需要將文件中的數(shù)據(jù)復(fù)制一份,而且原文件的有關(guān)元數(shù)據(jù)
也要保留,則可以使用
copy2()函數(shù)復(fù)制文件。下面的代碼
8.8使用
copy()與
copy2()函數(shù)復(fù)制同一個文件,之后使用
os庫中的
getmtime()函數(shù)
獲取原文件與兩個復(fù)制文件的修改時間(modify
time)。其實每個文件都有創(chuàng)建時間、修改時間、
最近訪問時間等
3個常用的時間信息??紤]到文件在復(fù)制到新位置后,創(chuàng)建時間就變成了復(fù)制動作
發(fā)生的時刻,但修改時間保持不變,因此代碼中獲取的是文件的修改時間。類似的,os庫中還有g(shù)etctime()
和
getatime()函數(shù)用于分別獲取創(chuàng)建時間和最后訪問時間。8.4.2使用copy()函數(shù)復(fù)制文件的元數(shù)據(jù)從代碼
8.8
的運行結(jié)果中顯然可見,copy2()函數(shù)復(fù)制的文件保留了原文件的修改時間,而
copy()
函數(shù)則丟掉了這項信息。代碼
8.8使用
copy2()函數(shù)復(fù)制文件和元數(shù)據(jù)8.4.2使用copy()函數(shù)復(fù)制文件的元數(shù)據(jù)import
shutilimport
os#使用
copy()函數(shù)復(fù)制文件shutil.copy('.\\test1\\read_me.txt','.\\test1\\read_me_copy.txt')#使用
copy2()函數(shù)復(fù)制文件shutil.copy2('.\\test1\\read_me.txt','.\\test1\\read_me_copy2.txt')
print("復(fù)制完畢。")modify_time_oldfile=os.path.getmtime('.\\test1\\read_me.txt')modify_time_newfile=os.path.getmtime('.\\test1\\read_me_copy.txt')modify_time_newfile2=os.path.getmtime('.\\test1\\read_me_copy2.txt')print("原文件的修改時間:",modify_time_oldfile)print("copy
函數(shù)復(fù)制的文件的修改時間:",modify_time_newfile)print("copy2
函數(shù)復(fù)制的文件的修改時間:",modify_time_newfile2)代碼
8.8
的運行結(jié)果如下,注意
getmtime()函數(shù)得到的時間是以時間戳形式顯示的。讀者實際嘗
試時也可以從Windows資源管理器中查看這些文件的修改時間。復(fù)制完畢。原文件的修改時間:1676771376.9442756copy
函數(shù)復(fù)制的文件的修改時間:1676774942.3965209copy2
函數(shù)復(fù)制的文件的修改時間:1676771376.9442756無論是
copy()函數(shù)還是
copy2()函數(shù)只能復(fù)制單個文件,如果想復(fù)制某個文件夾下的所有文件甚
至子文件夾,則可以使用
shutil
庫中的
copytree()函數(shù)。其使用方法與
copy()函數(shù)的使用方法大同小
異,需要注意的是,目標路徑的最后一部分不能事先存在,而是由
copytree()函數(shù)創(chuàng)建而成的。如果不是復(fù)制而是移動文件,則只需將
copy()函數(shù)換為
move()函數(shù)即可。disk_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地下排水建設(shè)項目材料買賣協(xié)議典范
- 2024技術(shù)顧問服務(wù)協(xié)議系列篇
- 2024企業(yè)債務(wù)融資協(xié)議模板
- 2024屆安徽鳳臺一中高三3月教學(xué)質(zhì)量檢測試題數(shù)學(xué)試題理試題
- 2024槽棎施工質(zhì)量保障協(xié)議范本
- 2024年房產(chǎn)開發(fā)融資居間協(xié)議模板
- 2024建筑外保溫服務(wù)協(xié)議樣式
- 2024年商業(yè)交易貨樣協(xié)議模板
- 2024年度美容院加盟協(xié)議示例
- 2024全職員工派遣協(xié)議范本
- 期中測試卷-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 歐洲文明與世界遺產(chǎn)智慧樹知到期末考試答案章節(jié)答案2024年廣東工業(yè)大學(xué)
- 康復(fù)科護士的腦卒中康復(fù)與護理
- 人教版五年級上冊數(shù)學(xué)《可能性》作業(yè)設(shè)計
- 安陽師范學(xué)院校級教學(xué)團隊推薦表
- 企業(yè)中層管理人員素質(zhì)測評(附答案)
- 《新概念英語》第二冊(電子版)
- 活性焦過濾吸附法污水深處理技術(shù)
- 初中英語學(xué)科關(guān)鍵能力的培養(yǎng)策略
- 高血壓健康教育知識講座(完整版)
- 社區(qū)衛(wèi)生服務(wù)中心公共衛(wèi)生績效考核及獎金分配制度
評論
0/150
提交評論