Энэ заавар нь Try Except блок ашиглан Python хэл дээрх онцгой тохиолдлуудыг зохицуулах талаар програмчлалын жишээнүүдийн тусламжтайгаар тайлбарласан болно:
Хоёр төрлийн алдаа Python програмыг гэнэт зогсооход хүргэж болно, тухайлбал Үйлбэр зүй. Алдаа ба Үл хамаарах зүйл . Энэ зааварт бид хоёр дахь алдааны төрлийг (Үл хамаарах зүйл) хэд хэдэн чухал сэдвийн хүрээнд авч үзэх болно.
Бид программ дахь үл хамаарах зүйлсийг зохицуулах нь маш их ашиг тустай байх болно, тухайлбал:
- Бат бөх програм үүсгэх.
- Цэвэр бөгөөд алдаагүй код үүсгэх.
Python Try Except
Нэг сайн мэдээ бол Python-д манай кодын алдааг илрүүлэх олон тооны үл хамаарах зүйлүүд байдаг. Мөн энэ нь суулгасан үл хамаарах зүйлүүдийн аль нь ч бидний хэрэгцээнд тохирохгүй тохиолдолд тусгайлан тохиолдох онцгой нөхцөлийг бий болгох боломжийг олгодог.
Үл хамаарах зүйл гэж юу вэ
Тэгвэл Python-д үл хамаарах зүйл гэж юу вэ? Энгийнээр хэлбэл, Python орчуулагч хүчингүй кодыг ажиллуулах гэж оролдох бүрд энэ нь онцгой тохиолдол үүсгэдэг бөгөөд ийм онцгой тохиолдлыг зохицуулахгүй тохиолдолд энэ нь програмын зааврын хэвийн урсгалыг тасалдуулж, ул мөрийг хэвлэдэг.
Хүчингүй код үүсгэж, Python орчуулагч хэрхэн хариу үйлдэл үзүүлэхийг харцгаая.
Python бүрхүүлийг нээгээд дараах кодыг ажиллуулна уу.
>>> 50/0
Энэ нь нэг нь юм. програмчлалын хамгийн нийтлэг алдаа. Дээрх код нь 50 тоог 0 (тэг)-т хуваахыг оролддог. Питонхувьсагч openFile нь хуваарилагдахаас өмнө байна.
Энд жижиг заль мэх бол finally-block дотор онцгой тохиолдлын зохицуулагчийг ашиглах явдал юм.
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: try: print("Cleaning...") openFile.close() except: # catches all exceptions pass # Ignore this error because we don't care. if __name__ == '__main__': filePath = './text.txt' readFile(filePath)
Хэрэв бидний try-block FileNotFoundError-ийг өсгөх юм бол бид дараах гаралттай байх болно
Үл хамаарах зүйлийг нэмэгдүүлэх
Python-ийн онцгой тохиолдлын талаар нэг сайн мэдээ бол бид санаатайгаар хийх боломжтой. тэднийг өсгө. Үл хамаарах зүйлүүд нь raise хэллэг -ээр үүсгэгдэнэ.
Raise мэдэгдэл нь дараах синтакстай байна:
raise [ExceptionName[(*args: Object)]]
Терминал нээж, дурын үл хамаарах объектыг эхлүүлнэ. Python-д суулгасан Үл хамаарах зүйлүүд. Жишээ нь, хэрвээ бид ZeroDivisionError:
>>> raise ZeroDivisionError("Can't divide by zero")
бид буцаан авах болно:
Тиймээс, Яагаад онцгой тохиолдлуудыг нэмэгдүүлэх нь чухал вэ?
- Захиалгат үл хамаарах зүйлүүдтэй ажиллах үед.
- Эрүүл мэндийн үзлэгийн үеэр.
Захиалгат онцгой байдлын ангиуд
Захиалгат үл хамаарах зүйл нь таны хэрэгцээнд нийцсэн алдааг зохицуулахын тулд бий болгодог зүйл юм. Хамгийн гол нь бид Exception объектоос үүсэлтэй классыг тодорхойлж, дараа нь бид онцгой байдлын ангиа өсгөхийн тулд өсгөх мэдэгдлийг ашигладаг.
Бид хэрэглэгчийн оруулгыг шалгаж, баталгаажуулахыг хүсч байна гэж бодъё. оролтын утга сөрөг биш (эрүүл мэндийн үзлэг). Мэдээжийн хэрэг, бид Python-ийн ValueError-ийн онцгой тохиолдлыг нэмэгдүүлж болох ч InputIsNegativeError гэх мэт тодорхой бөгөөд өөрөө тайлбарлах нэрээр алдааг өөрчлөхийг хүсч байна. Гэхдээ энэ үл хамаарах зүйл нь суулгасан Python биш юмҮл хамаарах зүйл.
Тиймээс эхлээд бид Exception-ээс үүсэлтэй үндсэн ангиа үүсгэнэ.
class CustomError(Exception): "Base class exception for all exceptions of this module" pass
Дараа нь бид үндсэн ангийг өвлөн авч, бидний тодорхой алдааг зохицуулах онцгой ангиа үүсгэнэ.
class InputIsNegativeError(CustomError): """Raised when User enters a negative value""" pass
Үүнийг туршиж үзье
try: value = int(input()) if value 0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print("Input value shouldn't be negative")
Дээрх хэрэглэгчийн оруулсан кодын хүсэлт, сөрөг эсэхийг шалгана уу. Хэрэв үнэн бол энэ нь дараа нь онцгой мэдэгдэлд баригдсан InputIsNegativeError-ийн онцгой тохиолдлыг үүсгэдэг.
Доорх бүрэн код байна:
class CustomError(Exception): "Base class exception for all exceptions of this module" pass class InputIsNegativeError(CustomError): """Raised when User enters a negative value""" pass if __name__ == '__main__': try: value = int(input("Input a number: ")) if value 0: raise InputIsNegativeError # Raise exception if value is negative except InputIsNegativeError: # catch and handle exception print("Input value shouldn't be negative")
Хэрэв оролтын утга сөрөг тоо бол -1, тэгвэл бид гаралттай болно:
Python-н захиалгат үл хамаарах зүйлсийн талаар илүү дэлгэрэнгүй мэдээлэл авахыг хүсвэл Python баримтаас үзнэ үү.
Түгээмэл асуултууд
Асуулт #1) Python үл хамаарах зүйлийг хэрхэн зохицуулдаг вэ?
Хариулт: Python нь -г ашиглан үл хамаарах зүйлсийг зохицуулдаг. try-except мэдэгдэл . Үл хамаарах зүйлийг үүсгэж болох кодыг try блок -д байрлуулж, гүйцэтгэнэ, харин блокноос бусад нь ямар нэгэн тохиолдлоор үл хамаарах зүйлсийг зохицуулах кодыг агуулна.
Асуулт №2) Python-д үл хамаарах зүйл гэж юу вэ?
Хариулт: Python орчуулагч хүчингүй кодтой тулгарах бүрд энэ нь үл хамаарах зүйл үүсгэдэг бөгөөд энэ нь Python-ын өөрийнх нь арга юм. гэнэтийн зүйл тохиолдсоныг бидэнд хэлэх. Бид мөн raise хэллэг ашиглан онцгой тохиолдлуудыг зориудаар өсгөж болно.
Асуулт #3) Python олон үл хамаарах зүйлийг хэрхэн зохицуулдаг вэ?
Хариулт: Python нь олон үл хамаарах зүйлийг зохицуулдагдан блок эсвэл блокоос бусад олон аль нэгийг ашиглана.
Нэг блокийн хувьд үл хамаарах зүйлсийг tuple хэлбэрээр дамжуулдаг: бусад (Exception1, Exception2,..,ExceptionN) болон Python-н шалгалтууд баруунаас зүүн тийш тоглолтонд. Энэ тохиолдолд үл хамаарах зүйл бүрийн хувьд ижил үйлдэл хийнэ.
Бүх үл хамаарах зүйлийг барих өөр нэг арга бол except түлхүүр үгийн ард үл хамаарах зүйлийн нэрийг орхих явдал юм.
except: # handle all exceptions here
Хоёр дахь арга нь Үл хамаарах зүйл бүрийн хувьд онцгой блок ашиглахын тулд:
except Exception1: # code to handle Exception1 goes here except Exception2: # code to handle Exception2 goes here except ExceptionN: # code to handle ExceptionN goes here
Ингэснээр та Үл хамаарах зүйл бүрт тус тусад нь үйлдлүүд хийж болно.
Асуулт №4) Яагаад онцгой тохиолдлыг зохицуулах нь Python-д чухал байдаг вэ?
Хариулт: Python-д үл хамаарах зүйлсийг зохицуулах давуу тал нь бид бат бөх, цэвэр, алдаагүй програмуудыг үүсгэж чаддагт оршино. Бид зарим алдааны улмаас манай үйлдвэрлэлийн кодыг гацахыг хүсэхгүй байгаа тул бид алдааг зохицуулж, програмаа үргэлжлүүлэн ажиллуулдаг.
Асуулт №5) Python-д үл хамаарах зүйлийг хэрхэн үл тоомсорлох вэ?
Хариулт: Python-д үл хамаарах зүйлийг үл тоомсорлохын тулд except блок дахь pass түлхүүр үгийг ашиглана уу. Бид ValueError-ийн онцгой тохиолдлыг үл тоомсорлохыг хүсч байна гэж бодъё. Бид үүнийг дараах байдлаар хийх болно:
except ValueError: pass
Хэрэв та юу хийж байгаагаа мэдэхгүй л бол үл хамаарах зүйлийг үл тоомсорлох нь буруу үйлдэл юм. Наад зах нь хэрэглэгчдэд гарч болзошгүй бүх алдааны талаар мэдэгдээрэй.
Дүгнэлт
Энэ зааварт бид: Python Exceptions, Traceback; Оролдоод / Эсрэг / Өөр / Эцэст -ийн үл хамаарах зүйлсийг хэрхэн зохицуулах талаарблокууд, хэрхэн Өсгөх Үл хамаарах зүйл, эцэст нь өөрсдийн захиалгат онцгой тохиолдлуудыг хэрхэн үүсгэх талаар.
Унсанд баярлалаа!
орчуулагч үүнийг хүчингүй үйлдэл гэж үзээд ZeroDivisionErrorүүсгэж, програмыг тасалдуулж, мөрийг хэвлэдэг.
Бид гэдгийг тодорхой харж байна. ZeroDivisionError бол онцгой тохиолдол юм. Энэ нь тоог тэгээр хуваах нь тийм ч таатай биш гэдгийг бидэнд хэлэх Python-ийн өөрийнх нь арга юм. Хэдийгээр JavaScript зэрэг бусад хэл дээр энэ нь алдаа биш юм; мөн python нь энэ практикийг хатуу хориглодог.
Мөн энэ нь зөвхөн онцгой объект бөгөөд Python-д ийм олон объект суулгасан гэдгийг мэдэх нь чухал. Python-д суурилуулсан бүх үл хамаарах зүйлсийг харахын тулд энэхүү Python-ын албан ёсны баримт бичгийг шалгана уу.
Traceback-ийг ойлгох нь
Бид онцгой тохиолдлуудыг зохицуулахын өмнө энэ нь онцгой тохиолдлуудад яг юу тохиолдохыг ойлгоход тусална гэж бодож байна. ажиллахгүй бөгөөд Python нь бидний алдааны талаар бидэнд мэдэгдэхийн тулд чадах бүхнээ хийдэг.
Python алдаатай тулгарах бүрд энэ нь онцгой тохиолдол үүсгэдэг. Хэрэв энэ үл хамаарах зүйлийг зохицуулахгүй бол энэ нь Traceback гэж нэрлэгддэг зарим мэдээллийг үүсгэдэг. Тэгэхээр, энэ ул мөр нь ямар мэдээллийг агуулж байна вэ?
Үүнд:
- Ямар онцгой тохиолдол гарсан болон энэ үл хамаарах зүйл тохиолдохоос өмнө юу тохиолдсоныг бидэнд хэлдэг алдааны мессежийг агуулна. дээшлүүлсэн.
- Энэ алдааг үүсгэсэн кодын янз бүрийн мөрийн дугаарууд. Алдаа нь дуудлагын стек гэж нэрлэгддэг функцүүдийн дарааллаас үүдэлтэй байж болох бөгөөд үүнийг бид дараа нь хэлэлцэх болно.
Хэдийгээр энэ ньАрай төөрөгдүүлсэн тул дараагийн жишээ нь бидний ойлголтыг илүү гэрэлтүүлнэ гэж бид амлаж байна.
Дээрх 50-ийг 0-д хуваахад хэвлэгдсэн мөрийг эргэн санавал бид дараах мэдээллийг агуулж байгааг харж болно.
- Файл “”: Энэ нь энэ кодыг консолын терминалаас ажиллуулсан болохыг харуулж байна.
- мөр 1: Энэ нь энэ мөрийн дугаарт алдаа гарсныг хэлж өгнө.
- ZeroDivisionError: хуваах тэг: Энэ нь бидэнд ямар онцгой тохиолдол гарсан, юунаас болсон талаар өгүүлдэг.
Өөр жишээ татаад үзье. дуудлагын стек хэрхэн харагдахыг харна уу. Засварлагчийг нээгээд доорх кодыг оруулаад tracebackExp .py
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 compute = numb/div # 6 print(compute) # 7 if __name__ == '__main__': # 9 numb = 5 # 10 stack1(numb) # 11
гэж хадгална уу. Энэ файл олдсон лавлахаас терминал нээж ажиллуулна уу.
python tracebackExp.py
Та дараах ул мөрийг харах болно:
Дээрх зам мөр нь ойлгомжгүй мэт санагдаж болох ч үнэндээ тийм биш юм. Pythonistas нь доороос дээш гэсэн мөрийг унших хамгийн сайн аргыг бодож олжээ. Тиймээс энэ мэргэн ухааныг ашиглаад энэхүү ул мөр нь юу санал болгож байгааг ойлгохыг хичээцгээе.
- Хамгийн доод хэсэгт, бид ямар онцгой тохиолдол гарсан, яагаад үүнийг өсгөсөн тухай олж авдаг.
- Дээш хөдөлж, бид энэ алдаа гарсан tracebackExp .py файлын нэр, энэ алдааг үүсгэсэн тооцоолол compute = numb/div, функц stack2, мөн энэ тооцоолол хийгдсэн холбоосын дугаарын мөр 6-г авна. .
- Дээш хөдөлж, бид стек2 ажиллаж байгааг харж байна3-р мөрийн stack1 функцэд дуудагдсан.
- Хамгийн дээд талд шилжихэд бид stack1 функцийг 11-р мөрөнд дуудсан болохыг харж байна. модуль > Энэ нь гүйцэтгэгдэж байгаа файл гэдгийг бидэнд хэлдэг.
Нийтлэг Python-ийн онцгой тохиолдлууд
Python номын сан нь маш олон тооны үл хамаарах зүйлсийг тодорхойлдог. Та Python Баримт бичгийг шалгах эсвэл суулгасан local () функцийг дараах байдлаар дуудаж болно:
>>> dir(locals()['__builtins__'])
Бид эдгээр бүх үл хамаарах зүйлсийг арилгахыг оролдохгүй, гэхдээ бид цөөн хэдэн нийтлэг үл хамаарах зүйлийг харах болно. Танд тохиолдох магадлалтай.
#1) TypeError
Тохиромжгүй төрлийн объектод үйлдэл эсвэл функц хэрэглэх үед гарч ирдэг.
Жишээ 1
Доорх програмыг авч үзье. Энэ нь ногдол ашиг болон хуваагчийг авч, дараа нь ногдол ашгийг хуваагчаар хуваах үр дүнг тооцоолж хэвлэнэ.
def compute_division(): dividend = int(input("Enter the dividend: ")) # cast string to int divisor = input("Enter the divisor: ") # no casting # Compute division result = dividend/divisor # print result print("The result of {}/{} is: {}".format(dividend, divisor, result)) if __name__ == '__main__': result = compute_division()
Бид хэрэглэгчээс ногдол ашиг болон хуваагчийн утгыг хүссэн боловч хуваагчийн мөрийг гаргахаа мартдаг. утгыг бүхэл тоо болгоно. Тиймээс бид ногдол ашгийн төрөл нь бүхэл тоо ( int ), хуваагчийн төрөл нь тэмдэгт мөр ( str ) болж дуусна. Дараа нь бид хуваах оператор (/) тэмдэгт мөрүүд дээр ажилладаггүй тул TypeError -г авна.
Python-ээс ялгаатай нь энэ нь танд сонирхолтой байж магадгүй юм. Javascript нь операндуудын аль нэгийг нь нөгөө операндын төрлийн эквивалент утга руу хөрвүүлдэг Type Coercion-тэй.өөр өөр төрлүүд.
#2) ValueError
Энэ нь үйлдэл эсвэл функц зөв төрөлтэй боловч зохисгүй утгатай аргумент хүлээн авах үед үүсдэг.
Жишээ 2
Дээрх Жишээ 1 дээрх манай программыг авч үзье.
Хэрэв хэрэглэгч '3a' гэх мэт ногдол ашгийн хувьд үсэг, тоон утгыг оруулбал манай хөтөлбөр нэмэгдэх болно. ValueError-ийн онцгой тохиолдол. Учир нь Python int() арга нь ямар ч тоо эсвэл мөрийг авч бүхэл тоон объектыг буцаадаг ч мөрийн утга нь үсэг эсвэл тоон бус утгыг агуулж болохгүй.
#3) AttributeError
Байхгүй атрибутыг оноож эсвэл лавлах үед энэ үл хамаарах зүйл үүсдэг.
Жишээ 3
Програмыг авч үзье. доор. Энэ нь тоо авч, Python математикийн модулийг ашиглан квадрат язгуураа тооцдог
import math # import math library to gain access to its code def compute_square_root(number): # compute the square root using the math library result = math.sqr(number) return result if __name__ == '__main__': # get input to compute from user number = int(input("Compute Square root of: ")) # call function to compute square root
Хэрэглэгч тоо оруулахад манай програм математикийн модулийн функцийг ашиглан квадрат язгуурыг тооцоолохыг оролддог. бид алдаа гаргасан. sqrt-ийн оронд бид математикийн модульд байхгүй sqr-г андуурч бичсэн байна.
Тиймээс бид байхгүй sqr атрибутыг лавлах гэж оролдсон бөгөөд удирддаг. онцгой тохиолдолд AttributeError гарч байна. Бидний ихэнх нь ийм алдаа их гаргадаг. Тэгэхээр та ганцаараа биш.
Үл хамаарах зүйлсийг оролдохоос бусад тохиолдолд шийдвэрлэх
Програмист хүний хувьд бидний ихэнх нь цаг заваа зориулах зүйл бол бат бөх код бичих явдал юм.уян хатан. Зарим алдаанаас болж эвдэрдэггүй код. Python-д бид try – except хэллэг дотор өөрийн мэдэгдлүүдийг хавсаргаснаар үүнд хүрч чадна.
Python Try-Except мэдэгдэл
try-except хэллэг нь дараах бүтэцтэй байна:
try: #your code goes here except """Specify exception type(s) here""": #handle exception here
Кодоо tracebackExp .py доторх try-except хэллэг дотор оруулъя.
def stack1(numb): # 1 div = 0 # 2 stack2(numb, div) # 3 def stack2(numb, div): # 5 try: # 6 compute = numb/div # 7 print(compute) # 8 except ZeroDivisionError as zde: # 9 print(zde) # 10 if __name__ == '__main__': # 12 numb = 5 # 13 stack1(numb) # 14 print("program continuous") # 15
Энэ кодыг ажиллуулснаар гаралт гарах болно
Try-except хэллэг ингэж ажилладаг. Python кодыг try блок мөр 7-8 -д гүйцэтгэдэг. Хэрэв хүчингүй код олдохгүй бол 10-р мөр блок дахь кодыг алгасаж, гүйцэтгэлийг үргэлжлүүлнэ.
Гэхдээ хэрэв хүчингүй код олдвол гүйцэтгэл шууд зогсоно. оролдлого блок хийж, гарсан онцгой тохиолдол нь мөр 9 -д заасан онцгой тохиолдолтой таарч байгаа эсэхийг шалгана. Хэрэв энэ нь таарч байвал бусад блокыг ажиллуулж, үргэлжлүүлнэ. Хэрэв тэгэхгүй бол програм тасалдана.
Try-block нь ихэвчлэн онцгой тохиолдлыг үүсгэж болох кодыг агуулж байдаг бол except-block нь онцгой тохиолдлыг барьж, зохицуулдаг.
Олон үйлдэлтэй ажиллах
-аас бусад онцгой тохиолдлууд>Бид олон үл хамаарах зүйлийг ганц "бусад" эсвэл олон "үл хамаарах"-аар зохицуулж чадна. Энэ нь таны үл хамаарах зүйл бүрийг хэрхэн зохицуулахаас хамаарна.
#1) Олон үл хамаарах зүйлийг ганцаарчлан зохицуулах
try: #your code goes here except(Exception1[, Exception2[,...ExceptionN]]]): #handle exception here
Бид манай кодыг магадгүй гэж сэжиглэж байгаа үед энэ аргыг ашигладаг.өөр өөр онцгой тохиолдлуудыг гаргаж, бид тохиолдол бүрт ижил арга хэмжээ авахыг хүсч байна. Тэгэхээр хэрэв Python орчуулагч тохирохыг олсон бол бусад блокт бичигдсэн код ажиллана.
Доорх жишээ Python кодыг авч үзье
def get_fraction(value, idx): arr = [4,5,2,0] # a list of numbers idx_value = arr[idx] # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 3 # call function in a try-except statement. try: result = get_fraction(value, idx) print("Fraction is ", result) except (IndexError, ZeroDivisionError) as ex: print(ex)
Бидэнд хоёр байна. энд үүсгэж болох үл хамаарах зүйлүүд, ZeroDivisionError болон IndexError . Хэрэв эдгээр үл хамаарах зүйлсийн аль нэгийг нь авч үзвэл онцгой блок ажиллана.
Дээрх кодонд idx=3 байгаа тул idx_ утга 0 болж утга болно. /idx_ утга ZeroDivisionError-ийг өсгөх болно
#2) Олон үл хамаарах зүйлстэй олон үл хамаарах зүйлсийг зохицуулах
try: #your code goes here except Exception1: #handle exception1 here except Exception2: #handle exception2 here except ExceptionN: #handle exceptionN here
Хэрэв бид зохицуулахыг илүүд үзэх юм бол Үл хамаарах зүйл тус бүрийг тусад нь авч үзвэл та үүнийг ингэж хийж болно.
Доорх жишээ Python кодыг авч үзье
def get_fraction(value, idx): arr = [4,5,2,0] # a list of numbers idx_value = arr[idx] # if idx is > arr length, IndexError will be raised value/idx_value # if idx_value == 0, ZeroDivisionError will be raised if __name__ =='__main__': # set 'value' and 'idx' value = 54 idx = 5 # call function in a try-excepts statement. try: result = get_fraction(value, idx) print("Fraction is ", result) except IndexError: print("idx of {} is out of range".format(idx)) except ZeroDivisionError: print("arr[{}] is 0. Hence, can't divide by zero".format(idx)) except Exception as ex: print(ex) print("Not sure what happened so not safe to continue, \ app will be interrupted") raise ex
Бид эндээс онцгой тохиолдолыг хамгийн сүүлийн онцгой мэдэгдэлд ашигласан болохыг анзаарч байна. . Учир нь онцгой байдлын объект Exception нь аливаа үл хамаарах зүйлтэй таарч байна. Ийм учраас энэ нь үргэлж хамгийн сүүлд байх ёстой, учир нь Python нь бусад онцгой тохиолдлуудыг зохицуулагчтай таарах үед шалгахаа зогсооно.
Дээрх кодонд idx=5 , иймээс arr[idx ] нь IndexError -ийг өсгөх болно, учир нь idx нь жагсаалтын уртаас их байна arr
Мөн таны аппликешны ямар онцгой тохиолдол гарсан талаар мэдэхгүй байгаа нь гүйцэтгэлийг үргэлжлүүлэхэд хэзээ ч аюулгүй байдаггүй. Тийм ч учраас бидэнд урьдчилан таамаглаагүй үл хамаарах зүйлийг барьж авах Exception төрөл байдаг. Дараа нь бид мэдэгдэнэхэрэглэгч болон ижил онцгой тохиолдлыг үүсгэж програмыг тасалдуулж болно.
Өөрөөр оролдоно уу
Энэ нь онцгой тохиолдлыг зохицуулах заавал биш бөгөөд танд хүссэн кодыг нэмэх боломжийг олгоно. алдаа гараагүй үед ажиллуулна. Хэрэв алдаа гарвал энэ else-блок ажиллахгүй.
Доорх Python кодын жишээг авч үзээд засварлагчаа нээж, кодыг elseTry.py
def fraction_of_one(divisor): value = 1/divisor # if divisor is zero, ZeroDivisionError will be raised return value if __name__ == '__main__': while True: try: # Get input from the user. # if input is not a valid argument for int(), ValueError will be raised divisor = int(input("Enter a divisor: ")) # call our function to compute the fraction value = fraction_of_one(divisor) except (ValueError, ZeroDivisionError): print("Input can't be zero and should be a valid literal for int(). Please, try again!") else: print("Value: ", value) break0 гэж хадгална уу>Бид хэрэглэгчээс оролтыг авч, 1-ийг хуваахад ашигладаг. Энд бид хоёр боломжит үл хамаарах зүйл байгаа бөгөөд энэ нь хүчингүй хэрэглэгчийн оролт нь ValueErrorба тэг(0)шалтгаан болдог. ZeroDivisionError. Манай онцгой мэдэгдэл эдгээр алдааг зохицуулдаг.
Одоо бид утга -ын утгыг хэвлэхийг хүсэж байна. Манай else-блок нь зөвхөн try блок алдаагүй ажиллаж байгаа тохиолдолд хэвлэгдэх эсэхийг баталгаажуулдаг. Хэрэв бидний try-block дээр алдаа гарвал утга тодорхойгүй байх тул энэ нь чухал юм. Тиймээс, түүнд хандсанаар өөр алдаа гарна.
Дээрх кодыг Python elseTry.py ашиглан ажиллуулна уу
Дээрх гаралт нь үүнийг харуулж байна. Эхний оролтын хувьд бид 0 гэж бичээд ENTER дарна. Манай хуваагч 0-ийг хүлээн авснаас хойш 1/хуваагч zeroDivisionError -г өсгөсөн. Бидний хоёр дахь оролт нь k байсан бөгөөд энэ нь int ()-д хүчингүй, иймээс ValueError онцгой тохиолдол гарсан.
Гэхдээ бидний сүүлчийн оролт нь 9 байсан бөгөөд энэ нь хүчинтэй бөгөөд үр дүнд бид 0.1111111111111111 гэж хэвлэгдсэн “ утга ” утгыг авсан
Эцэст нь оролдоно ууМэдэгдэл
Энэ нь мөн онцгой тохиолдлуудыг зохицуулах заавал биш шинж бөгөөд онцгой тохиолдлын зохицуулагчид юу ч тохиолдсон үргэлж ажиллах болно.
Өөр нь:
- Үл хамаарах зүйл тохиолдох эсэх
- Буцах нь бусад блокуудад дуудагдсан ч гэсэн.
- Бусад блокуудад скриптээс гарсан ч гэсэн
Тиймээс, хэрэв бидэнд ямар ч нөхцөлд ажиллуулахыг хүссэн код байгаа бол эцэст нь-блок бол манай хүн юм. Энэ блокыг ихэвчлэн файлуудыг хаах гэх мэт цэвэрлэхэд ашигладаг.
Доорх жишээ Python кодыг авч үзье
def readFile(file_path): try: openFile = open(file_path,'r') # Open a file as read-only print(openFile.readline()) # Read first line of file content except FileNotFoundError as ex: print(ex) finally: print("Cleaning...") openFile.close() if __name__ == '__main__': filePath = './text.txt' readFile(filePath)
Энэ код нь text.txt файлыг нээж уншихыг оролддог. одоогийн лавлахдаа. Хэрэв файл байгаа бол манай программ файлын эхний мөрийг хэвлээд эцсийн блок ажиллуулж файлыг хаах болно.
Бидэнд энэ программын файл байгаа директорт text.txt нэртэй файл байгаа гэж хэлье. байгаа бөгөөд Hello агуулдаг. Хэрэв бид програмыг ажиллуулбал бид гаралттай байх болно
Энэ жишээг зориуд сонгосон, учир нь би биднээс файлуудыг хаах үед гарч болох жижиг асуудлыг шийдвэрлэхийг хүссэн. блок.
Хэрэв файл байхгүй бол FileNotFoundError үл хамаарах зүйл нэмэгдэж openFile хувьсагч тодорхойлогдохгүй бөгөөд файл болохгүй. обьект. Тиймээс үүнийг finally-блок дээр хаахыг оролдох нь NameError -ын дэд анги болох UnboundLocalError үл хамаарах байдлыг бий болгоно.
Энэ нь үндсэндээ бид лавлахыг оролдож байна гэсэн үг юм. нь