دستور try یک بند اختیاری دیگر دارد که برای تعریف اقدامات تمیزکاری طراحی شده که باید تحت تمام شرایط اجرا شوند. به عنوان مثال:
>>> try:
... raise KeyboardInterrupt
... finally:
... print('Goodbye, world!')
...
Goodbye, world!
Traceback (most recent call last):
File "", line 2, in
raise KeyboardInterrupt
KeyboardInterrupt
اگر یک بند finally حاضر باشد، بند finally به عنوان آخرین وظیفه قبل از تکمیل دستور try اجرا میشود. بند finally چه دستور try استثنایی ایجاد کند و چه نکند اجرا میشود. نکات زیر موارد پیچیدهتر هنگام وقوع استثناء را بحث میکنند:
try رخ دهد، استثنا ممکن است توسط یک بند except مدیریت شود. اگر استثنا توسط بند except مدیریت نشود، استثنا پس از اجرای بند finally بازایجاد میشود.except یا else رخ دهد. دوباره، استثنا پس از اجرای بند finally بازایجاد میشود.finally دستور break، continue یا return را اجرا کند، استثناءها بازایجاد نمیشوند. این میتواند گیجکننده باشد و بنابراین توصیه نمیشود. از نسخه ۳.۱۴، کامپایلر SyntaxWarning برای آن صادر میکند.try به دستور break، continue یا return برسد، بند finally درست قبل از اجرای دستور break، continue یا return اجرا خواهد شد.finally شامل دستور return باشد، مقدار برگشتی از دستور return بند finally خواهد بود، نه مقدار از دستور return بند try. این میتواند گیجکننده باشد و بنابراین توصیه نمیشود.به عنوان مثال:
>>> def bool_return(): ... try: ... return True ... finally: ... return False ... >>> bool_return() False
مثال پیچیدهتر:
>>> def divide(x, y):
... try:
... result = x / y
... except ZeroDivisionError:
... print("division by zero!")
... else:
... print("result is", result)
... finally:
... print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "", line 1, in
divide("2", "1")
File "", line 3, in divide
result = x / y
~~~~
TypeError: unsupported operand type(s) for /: 'str' and 'str'
همانطور که میبینید، بند finally در هر صورت اجرا میشود. TypeError ناشی از تقسیم دو رشته توسط بند except مدیریت نمیشود و بنابراین پس از اجرای بند finally بازایجاد میشود.
در برنامههای دنیای واقعی، بند finally برای آزادسازی منابع خارجی (مانند فایلها یا اتصالات شبکه) مفید است، صرف نظر از اینکه آیا استفاده از منبع موفقیتآمیز بوده یا نه.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial