diff --git a/tutorial/errors.po b/tutorial/errors.po index ad4cd51..1437853 100644 --- a/tutorial/errors.po +++ b/tutorial/errors.po @@ -14,15 +14,15 @@ msgstr "" "Project-Id-Version: Python 3.14\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-25 12:59+0330\n" -"PO-Revision-Date: 2021-06-28 01:50+0000\n" +"PO-Revision-Date: 2026-08-02 19:02+0330\n" "Last-Translator: Alireza Shabani (Revisto) , 2025\n" -"Language-Team: Persian (https://app.transifex.com/python-doc/teams/5390/" -"fa/)\n" +"Language-Team: Persian (https://app.transifex.com/python-doc/teams/5390/fa/)\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.6\n" #: ../../tutorial/errors.rst:5 msgid "Errors and Exceptions" @@ -31,8 +31,8 @@ msgstr "خطاها و استثناها" #: ../../tutorial/errors.rst:7 msgid "" "Until now error messages haven't been more than mentioned, but if you have " -"tried out the examples you have probably seen some. There are (at least) " -"two distinguishable kinds of errors: *syntax errors* and *exceptions*." +"tried out the examples you have probably seen some. There are (at least) two " +"distinguishable kinds of errors: *syntax errors* and *exceptions*." msgstr "" "تا اینجا پیام‌های خطا فقط به صورت کوتاه ذکر شده‌اند، اما اگر مثال‌ها را امتحان " "کرده باشید احتمالاً برخی از آن‌ها را دیده‌اید. حداقل دو نوع متمایز از خطا وجود " @@ -44,12 +44,11 @@ msgstr "خطاهای دستوری" #: ../../tutorial/errors.rst:17 msgid "" -"Syntax errors, also known as parsing errors, are perhaps the most common " -"kind of complaint you get while you are still learning Python::" +"Syntax errors, also known as parsing errors, are perhaps the most common kind " +"of complaint you get while you are still learning Python::" msgstr "" "خطاهای دستوری، که به‌عنوان خطاهای تجزیه‌گر «parsing errors» نیز شناخته می‌شوند، " -"شاید رایج‌ترین نوع خطاهایی باشند که هنگام یادگیری پایتون با آن‌ها مواجه " -"می‌شوید::" +"شاید رایج‌ترین نوع خطاهایی باشند که هنگام یادگیری پایتون با آن‌ها مواجه می‌شوید::" #: ../../tutorial/errors.rst:20 msgid "" @@ -68,20 +67,20 @@ msgstr "" #: ../../tutorial/errors.rst:26 msgid "" "The parser repeats the offending line and displays little arrows pointing at " -"the place where the error was detected. Note that this is not always the " -"place that needs to be fixed. In the example, the error is detected at the " +"the place where the error was detected. Note that this is not always the place " +"that needs to be fixed. In the example, the error is detected at the " "function :func:`print`, since a colon (``':'``) is missing just before it." msgstr "" -"تجزیه‌گر «parser» خط مشکل‌دار را تکرار می‌کند و فلش‌های کوچکی را نشان می‌دهد که " -"به جایی اشاره دارند که خطا در آن شناسایی شده است.\n" +"تجزیه‌گر «parser» خط مشکل‌دار را تکرار می‌کند و فلش‌های کوچکی را نشان می‌دهد که به " +"جایی اشاره دارند که خطا در آن شناسایی شده است.\n" "توجه داشته باشید که این همیشه همان جایی نیست که باید اصلاح شود.\n" -"در این مثال، خطا در تابع :func:`print` شناسایی شده است، زیرا دو نقطه " -"(``':'``) درست قبل از آن وجود ندارد." +"در این مثال، خطا در تابع :func:`print` شناسایی شده است، زیرا دو نقطه (``':'``) " +"درست قبل از آن وجود ندارد." #: ../../tutorial/errors.rst:31 msgid "" -"The file name (```` in our example) and line number are printed so " -"you know where to look in case the input came from a file." +"The file name (```` in our example) and line number are printed so you " +"know where to look in case the input came from a file." msgstr "" "نام فایل (در مثال ما ````) و شماره خط چاپ می‌ شوند تا اگر ورودی از یک " "فایل آمده باشد، بدانید باید کجا را بررسی کنید." @@ -93,18 +92,17 @@ msgstr "استثناء ها" #: ../../tutorial/errors.rst:40 msgid "" "Even if a statement or expression is syntactically correct, it may cause an " -"error when an attempt is made to execute it. Errors detected during " -"execution are called *exceptions* and are not unconditionally fatal: you " -"will soon learn how to handle them in Python programs. Most exceptions are " -"not handled by programs, however, and result in error messages as shown " -"here::" +"error when an attempt is made to execute it. Errors detected during execution " +"are called *exceptions* and are not unconditionally fatal: you will soon learn " +"how to handle them in Python programs. Most exceptions are not handled by " +"programs, however, and result in error messages as shown here::" msgstr "" "حتی اگر یک دستور یا عبارت از نظر دستوری «syntactically» درست باشد، ممکن است " "هنگام اجرای آن خطایی رخ دهد. خطاهایی که هنگام اجرا شناسایی می‌شوند «استثنا» " -"«*exceptions*» نام دارند و الزاماً باعث توقف برنامه نمی‌شوند؛ به‌زودی خواهید " -"آموخت چگونه آن‌ها را در برنامه‌های پایتون مدیریت کنید. با این حال، بیشتر " -"استثناها در برنامه‌ها مدیریت نمی‌شوند و به پیام‌های خطا ختم می‌شوند، مانند چیزی " -"که در اینجا نمایش داده شده است::" +"«*exceptions*» نام دارند و الزاماً باعث توقف برنامه نمی‌شوند؛ به‌زودی خواهید آموخت " +"چگونه آن‌ها را در برنامه‌های پایتون مدیریت کنید. با این حال، بیشتر استثناها در " +"برنامه‌ها مدیریت نمی‌شوند و به پیام‌های خطا ختم می‌شوند، مانند چیزی که در اینجا " +"نمایش داده شده است::" #: ../../tutorial/errors.rst:46 msgid "" @@ -148,50 +146,47 @@ msgstr "" #: ../../tutorial/errors.rst:65 msgid "" -"The last line of the error message indicates what happened. Exceptions come " -"in different types, and the type is printed as part of the message: the " -"types in the example are :exc:`ZeroDivisionError`, :exc:`NameError` " -"and :exc:`TypeError`. The string printed as the exception type is the name " -"of the built-in exception that occurred. This is true for all built-in " -"exceptions, but need not be true for user-defined exceptions (although it is " -"a useful convention). Standard exception names are built-in identifiers (not " +"The last line of the error message indicates what happened. Exceptions come in " +"different types, and the type is printed as part of the message: the types in " +"the example are :exc:`ZeroDivisionError`, :exc:`NameError` " +"and :exc:`TypeError`. The string printed as the exception type is the name of " +"the built-in exception that occurred. This is true for all built-in " +"exceptions, but need not be true for user-defined exceptions (although it is a " +"useful convention). Standard exception names are built-in identifiers (not " "reserved keywords)." msgstr "" -"آخرین خط از پیام خطا نشان می دهد که چه اتفاقی افتاده است. استثناها دارای " -"انواع مختلفی هستند و نوع آنها به عنوان بخشی از پیام چاپ می شود: انواع موجود " -"در مثال عبارتند از :exc:`ZeroDivisionError`، :exc:`NameError` " -"و :exc:`TypeError`. رشته ای که به عنوان نوع استثنا چاپ می شود، نام استثنای " -"داخلی است که رخ داده است. این موضوع برای تمام استثناهای داخلی صدق می کند، " -"اما برای استثناهای تعریف شده توسط کاربر لزوماً صحیح نیست (گرچه این یک قاعدهٔ " -"مفید محسوب می‌شود). نام های استثنای استاندارد شناسه های داخلی هستند (نه کلمات " -"کلیدی رزرو شده)." +"آخرین خط از پیام خطا نشان می دهد که چه اتفاقی افتاده است. استثناها دارای انواع " +"مختلفی هستند و نوع آنها به عنوان بخشی از پیام چاپ می شود: انواع موجود در مثال " +"عبارتند از :exc:`ZeroDivisionError`، :exc:`NameError` و :exc:`TypeError`. رشته " +"ای که به عنوان نوع استثنا چاپ می شود، نام استثنای داخلی است که رخ داده است. این " +"موضوع برای تمام استثناهای داخلی صدق می کند، اما برای استثناهای تعریف شده توسط " +"کاربر لزوماً صحیح نیست (گرچه این یک قاعدهٔ مفید محسوب می‌شود). نام های استثنای " +"استاندارد شناسه های داخلی هستند (نه کلمات کلیدی رزرو شده)." #: ../../tutorial/errors.rst:73 msgid "" "The rest of the line provides detail based on the type of exception and what " "caused it." msgstr "" -"بخش باقی‌ماندهٔ خط، جزئیاتی را بسته به نوع استثنا «exception» و علت وقوع آن " -"ارائه می‌دهد." +"بخش باقی‌ماندهٔ خط، جزئیاتی را بسته به نوع استثنا «exception» و علت وقوع آن ارائه " +"می‌دهد." #: ../../tutorial/errors.rst:76 msgid "" -"The preceding part of the error message shows the context where the " -"exception occurred, in the form of a stack traceback. In general it contains " -"a stack traceback listing source lines; however, it will not display lines " -"read from standard input." +"The preceding part of the error message shows the context where the exception " +"occurred, in the form of a stack traceback. In general it contains a stack " +"traceback listing source lines; however, it will not display lines read from " +"standard input." msgstr "" -"بخش قبلی پیام خطا، زمینه‌ای را نشان می‌دهد که در آن استثنا رخ داده است، به‌صورت " -"یک ردگیری پشته «stack traceback». به‌طور کلی، این بخش شامل ردگیری پشته‌ای است " -"که خطوطی از کد منبع را فهرست می‌کند؛ با این حال، خطوطی که از ورودی استاندارد " +"بخش قبلی پیام خطا، زمینه‌ای را نشان می‌دهد که در آن استثنا رخ داده است، به‌صورت یک " +"ردگیری پشته «stack traceback». به‌طور کلی، این بخش شامل ردگیری پشته‌ای است که " +"خطوطی از کد منبع را فهرست می‌کند؛ با این حال، خطوطی که از ورودی استاندارد " "«standard input» خوانده شده‌اند در آن نمایش داده نمی‌شوند." #: ../../tutorial/errors.rst:81 -msgid "" -":ref:`bltin-exceptions` lists the built-in exceptions and their meanings." +msgid ":ref:`bltin-exceptions` lists the built-in exceptions and their meanings." msgstr "" -":ref:`bltin-exceptions` لیستی از استثناهای داخلی و معانی آن ها را ارائه می " -"دهد." +":ref:`bltin-exceptions` لیستی از استثناهای داخلی و معانی آن ها را ارائه می دهد." #: ../../tutorial/errors.rst:87 msgid "Handling Exceptions" @@ -199,18 +194,17 @@ msgstr "مدیریت استثناها" #: ../../tutorial/errors.rst:89 msgid "" -"It is possible to write programs that handle selected exceptions. Look at " -"the following example, which asks the user for input until a valid integer " -"has been entered, but allows the user to interrupt the program " -"(using :kbd:`Control-C` or whatever the operating system supports); note " -"that a user-generated interruption is signalled by raising " -"the :exc:`KeyboardInterrupt` exception. ::" +"It is possible to write programs that handle selected exceptions. Look at the " +"following example, which asks the user for input until a valid integer has been " +"entered, but allows the user to interrupt the program (using :kbd:`Control-C` " +"or whatever the operating system supports); note that a user-generated " +"interruption is signalled by raising the :exc:`KeyboardInterrupt` exception. ::" msgstr "" -"امکان نوشتن برنامه‌هایی وجود دارد که برخی از استثناها را مدیریت می‌کنند. به " -"مثال زیر نگاه کنید که از کاربر ورودی می‌خواهد تا زمانی که یک عدد صحیح معتبر " -"وارد شود، اما به کاربر اجازه می‌دهد برنامه را قطع کند (با فشردن :kbd:`Control-" -"C` یا هر روشی که سیستم‌عامل پشتیبانی می‌کند)؛ توجه داشته باشید که قطع برنامه " -"توسط کاربر با ایجاد استثنای :exc:`KeyboardInterrupt` مشخص می‌شود. ::" +"امکان نوشتن برنامه‌هایی وجود دارد که برخی از استثناها را مدیریت می‌کنند. به مثال " +"زیر نگاه کنید که از کاربر ورودی می‌خواهد تا زمانی که یک عدد صحیح معتبر وارد شود، " +"اما به کاربر اجازه می‌دهد برنامه را قطع کند (با فشردن :kbd:`Control-C` یا هر " +"روشی که سیستم‌عامل پشتیبانی می‌کند)؛ توجه داشته باشید که قطع برنامه توسط کاربر با " +"ایجاد استثنای :exc:`KeyboardInterrupt` مشخص می‌شود. ::" #: ../../tutorial/errors.rst:95 msgid "" @@ -252,47 +246,62 @@ msgstr "" #: ../../tutorial/errors.rst:111 msgid "" -"If an exception occurs during execution of the :keyword:`try` clause, the " -"rest of the clause is skipped. Then, if its type matches the exception " -"named after the :keyword:`except` keyword, the *except clause* is executed, " -"and then execution continues after the try/except block." +"If an exception occurs during execution of the :keyword:`try` clause, the rest " +"of the clause is skipped. Then, if its type matches the exception named after " +"the :keyword:`except` keyword, the *except clause* is executed, and then " +"execution continues after the try/except block." msgstr "" -"اگر در طول اجرای بخش :keyword:`try` استثنایی رخ دهد، بقیه آن بخش نادیده " -"گرفته می‌شود. سپس، اگر نوع استثنا با استثنایی که بعد از " -"کلیدواژه :keyword:`except` آمده مطابقت داشته باشد، *بخش except* اجرا می‌شود و " -"پس از آن اجرای برنامه بعد از بلوک try/except ادامه می‌یابد." +"اگر در طول اجرای بخش :keyword:`try` استثنایی رخ دهد، بقیه آن بخش نادیده گرفته " +"می‌شود. سپس، اگر نوع استثنا با استثنایی که بعد از کلیدواژه :keyword:`except` " +"آمده مطابقت داشته باشد، *بخش except* اجرا می‌شود و پس از آن اجرای برنامه بعد از " +"بلوک try/except ادامه می‌یابد." #: ../../tutorial/errors.rst:116 msgid "" -"If an exception occurs which does not match the exception named in the " -"*except clause*, it is passed on to outer :keyword:`try` statements; if no " -"handler is found, it is an *unhandled exception* and execution stops with an " -"error message." +"If an exception occurs which does not match the exception named in the *except " +"clause*, it is passed on to outer :keyword:`try` statements; if no handler is " +"found, it is an *unhandled exception* and execution stops with an error message." msgstr "" +"اگر استثنایی رخ دهد که با استثنای نام‌برده‌شده در *بند except* مطابقت نداشته " +"باشد، به دستورهای :keyword:`try` بیرونی منتقل می‌شود. اگر هیچ رسیدگی‌کننده‌ای " +"(handler) پیدا نشود، آن استثنا یک *استثنای رسیدگی‌نشده* (unhandled exception) " +"محسوب می‌شود و اجرای برنامه با نمایش یک پیام خطا متوقف خواهد شد." #: ../../tutorial/errors.rst:120 msgid "" -"A :keyword:`try` statement may have more than one *except clause*, to " -"specify handlers for different exceptions. At most one handler will be " -"executed. Handlers only handle exceptions that occur in the corresponding " -"*try clause*, not in other handlers of the same :keyword:`!try` statement. " -"An *except clause* may name multiple exceptions, for example::" +"A :keyword:`try` statement may have more than one *except clause*, to specify " +"handlers for different exceptions. At most one handler will be executed. " +"Handlers only handle exceptions that occur in the corresponding *try clause*, " +"not in other handlers of the same :keyword:`!try` statement. An *except " +"clause* may name multiple exceptions, for example::" msgstr "" +"یک دستور :keyword:`try` می‌تواند بیش از یک *بند except* داشته باشد تا برای " +"استثناهای مختلف رسیدگی‌کننده‌های متفاوتی تعریف شود. در هر بار وقوع استثنا، حداکثر " +"یکی از این رسیدگی‌کننده‌ها اجرا می‌شود. هر رسیدگی‌کننده فقط استثناهایی را مدیریت " +"می‌کند که در *بخش try* متناظر با آن رخ داده‌اند، نه استثناهایی که در سایر " +"رسیدگی‌کننده‌های همان دستور :keyword:`!try` ایجاد شوند. همچنین یک *بند except* " +"می‌تواند چندین استثنا را مشخص کند، برای مثال::" #: ../../tutorial/errors.rst:126 msgid "" "... except RuntimeError, TypeError, NameError:\n" "... pass" msgstr "" +"... except RuntimeError, TypeError, NameError:\n" +"... pass" #: ../../tutorial/errors.rst:129 msgid "" -"A class in an :keyword:`except` clause matches exceptions which are " -"instances of the class itself or one of its derived classes (but not the " -"other way around --- an *except clause* listing a derived class does not " -"match instances of its base classes). For example, the following code will " -"print B, C, D in that order::" +"A class in an :keyword:`except` clause matches exceptions which are instances " +"of the class itself or one of its derived classes (but not the other way around " +"--- an *except clause* listing a derived class does not match instances of its " +"base classes). For example, the following code will print B, C, D in that " +"order::" msgstr "" +"کلاسی که در یک :keyword:`except` مشخص می‌شود، با استثناهایی مطابقت دارد که " +"نمونه‌ای از همان کلاس یا یکی از زیرکلاس‌های آن باشند (اما برعکس آن صادق نیست؛ " +"یعنی *بند except* که یک زیرکلاس را مشخص می‌کند، با نمونه‌های کلاس پایهٔ آن مطابقت " +"نخواهد داشت). برای مثال، کد زیر به‌ترتیب `B`، `C` و `D` را چاپ می‌کند::" #: ../../tutorial/errors.rst:134 msgid "" @@ -315,29 +324,57 @@ msgid "" " except B:\n" " print(\"B\")" msgstr "" +"class B(Exception):\n" +" pass\n" +"\n" +"class C(B):\n" +" pass\n" +"\n" +"class D(C):\n" +" pass\n" +"\n" +"for cls in [B, C, D]:\n" +" try:\n" +" raise cls()\n" +" except D:\n" +" print(\"D\")\n" +" except C:\n" +" print(\"C\")\n" +" except B:\n" +" print(\"B\")" #: ../../tutorial/errors.rst:153 msgid "" -"Note that if the *except clauses* were reversed (with ``except B`` first), " -"it would have printed B, B, B --- the first matching *except clause* is " -"triggered." +"Note that if the *except clauses* were reversed (with ``except B`` first), it " +"would have printed B, B, B --- the first matching *except clause* is triggered." msgstr "" +"توجه کنید که اگر ترتیب *بندهای except* برعکس بود (یعنی ``except B`` در ابتدا " +"قرار می‌گرفت)، خروجی `B`، `B`، `B` می‌شد؛ زیرا نخستین *بند except* که با استثنا " +"مطابقت داشته باشد، اجرا می‌شود." #: ../../tutorial/errors.rst:156 msgid "" "When an exception occurs, it may have associated values, also known as the " -"exception's *arguments*. The presence and types of the arguments depend on " -"the exception type." +"exception's *arguments*. The presence and types of the arguments depend on the " +"exception type." msgstr "" +"هنگامی که یک استثنا رخ می‌دهد، ممکن است مقادیر مرتبطی نیز همراه آن باشد که به " +"آن‌ها *آرگومان‌های* استثنا گفته می‌شود. وجود و نوع این آرگومان‌ها به نوع استثنا " +"بستگی دارد." #: ../../tutorial/errors.rst:160 msgid "" "The *except clause* may specify a variable after the exception name. The " "variable is bound to the exception instance which typically has an ``args`` " -"attribute that stores the arguments. For convenience, builtin exception " -"types define :meth:`~object.__str__` to print all the arguments without " -"explicitly accessing ``.args``. ::" +"attribute that stores the arguments. For convenience, builtin exception types " +"define :meth:`~object.__str__` to print all the arguments without explicitly " +"accessing ``.args``. ::" msgstr "" +"*بند except* می‌تواند پس از نام استثنا، یک متغیر نیز مشخص کند. این متغیر به " +"نمونهٔ استثنا (exception instance) نسبت داده می‌شود که معمولاً دارای ویژگی " +"``args`` برای ذخیرهٔ آرگومان‌های استثنا است. برای راحتی، انواع داخلی استثنا " +"متد :meth:`~object.__str__` را طوری تعریف کرده‌اند که بدون نیاز به دسترسی مستقیم " +"به ``.args``، همهٔ آرگومان‌ها را چاپ کند.::" #: ../../tutorial/errors.rst:166 msgid "" @@ -347,8 +384,7 @@ msgid "" "... print(type(inst)) # the exception type\n" "... print(inst.args) # arguments stored in .args\n" "... print(inst) # __str__ allows args to be printed directly,\n" -"... # but may be overridden in exception " -"subclasses\n" +"... # but may be overridden in exception subclasses\n" "... x, y = inst.args # unpack args\n" "... print('x =', x)\n" "... print('y =', y)\n" @@ -359,12 +395,30 @@ msgid "" "x = spam\n" "y = eggs" msgstr "" +">>> try:\n" +"... raise Exception('spam', 'eggs')\n" +"... except Exception as inst:\n" +"... print(type(inst)) # the exception type\n" +"... print(inst.args) # arguments stored in .args\n" +"... print(inst) # __str__ allows args to be printed directly,\n" +"... # but may be overridden in exception subclasses\n" +"... x, y = inst.args # unpack args\n" +"... print('x =', x)\n" +"... print('y =', y)\n" +"...\n" +"\n" +"('spam', 'eggs')\n" +"('spam', 'eggs')\n" +"x = spam\n" +"y = eggs" #: ../../tutorial/errors.rst:183 msgid "" "The exception's :meth:`~object.__str__` output is printed as the last part " "('detail') of the message for unhandled exceptions." msgstr "" +"خروجی متد :meth:`~object.__str__` استثنا به‌عنوان آخرین بخش (بخش «جزئیات») پیام " +"مربوط به استثناهای رسیدگی‌نشده چاپ می‌شود." #: ../../tutorial/errors.rst:186 msgid "" @@ -372,18 +426,29 @@ msgid "" "subclasses, :exc:`Exception`, is the base class of all the non-fatal " "exceptions. Exceptions which are not subclasses of :exc:`Exception` are not " "typically handled, because they are used to indicate that the program should " -"terminate. They include :exc:`SystemExit` which is raised " -"by :meth:`sys.exit` and :exc:`KeyboardInterrupt` which is raised when a user " -"wishes to interrupt the program." -msgstr "" +"terminate. They include :exc:`SystemExit` which is raised by :meth:`sys.exit` " +"and :exc:`KeyboardInterrupt` which is raised when a user wishes to interrupt " +"the program." +msgstr "" +":exc:`BaseException` کلاس پایهٔ مشترک همهٔ استثناها است. یکی از زیرکلاس‌های آن، " +"یعنی :exc:`Exception`، کلاس پایهٔ تمام استثناهای غیرمرگبار است. استثناهایی که " +"زیرکلاس :exc:`Exception` نیستند معمولاً مدیریت نمی‌شوند، زیرا برای نشان دادن این " +"موضوع به‌کار می‌روند که برنامه باید خاتمه یابد. از جملهٔ آن‌ها می‌توان " +"به :exc:`SystemExit` که توسط :meth:`sys.exit` ایجاد می‌شود " +"و :exc:`KeyboardInterrupt` که هنگام درخواست کاربر برای قطع اجرای برنامه ایجاد " +"می‌شود، اشاره کرد." #: ../../tutorial/errors.rst:194 msgid "" ":exc:`Exception` can be used as a wildcard that catches (almost) everything. " "However, it is good practice to be as specific as possible with the types of " -"exceptions that we intend to handle, and to allow any unexpected exceptions " -"to propagate on." +"exceptions that we intend to handle, and to allow any unexpected exceptions to " +"propagate on." msgstr "" +":exc:`Exception` را می‌توان به‌عنوان یک الگوی کلی (wildcard) برای گرفتن (تقریباً) " +"همهٔ استثناها به‌کار برد. با این حال، بهتر است تا حد امکان نوع استثناهایی را که " +"قصد مدیریت آن‌ها را داریم به‌طور دقیق مشخص کنیم و اجازه دهیم استثناهای غیرمنتظره " +"به سطوح بالاتر منتقل شوند." #: ../../tutorial/errors.rst:199 msgid "" @@ -391,6 +456,9 @@ msgid "" "exception and then re-raise it (allowing a caller to handle the exception as " "well)::" msgstr "" +"رایج‌ترین الگوی مدیریت :exc:`Exception` این است که ابتدا استثنا چاپ یا ثبت (log) " +"شود و سپس دوباره ایجاد (re-raise) گردد تا فراخواننده نیز بتواند در صورت نیاز آن " +"را مدیریت کند::" #: ../../tutorial/errors.rst:203 msgid "" @@ -408,14 +476,31 @@ msgid "" " print(f\"Unexpected {err=}, {type(err)=}\")\n" " raise" msgstr "" +"import sys\n" +"\n" +"try:\n" +" f = open('myfile.txt')\n" +" s = f.readline()\n" +" i = int(s.strip())\n" +"except OSError as err:\n" +" print(\"OS error:\", err)\n" +"except ValueError:\n" +" print(\"Could not convert data to an integer.\")\n" +"except Exception as err:\n" +" print(f\"Unexpected {err=}, {type(err)=}\")\n" +" raise" #: ../../tutorial/errors.rst:217 msgid "" "The :keyword:`try` ... :keyword:`except` statement has an optional *else " -"clause*, which, when present, must follow all *except clauses*. It is " -"useful for code that must be executed if the *try clause* does not raise an " -"exception. For example::" +"clause*, which, when present, must follow all *except clauses*. It is useful " +"for code that must be executed if the *try clause* does not raise an exception. " +"For example::" msgstr "" +"دستور :keyword:`try` ... :keyword:`except` یک *بند else* اختیاری نیز دارد که در " +"صورت وجود، باید پس از همهٔ *بندهای except* قرار گیرد. این بند برای کدی مفید است " +"که تنها در صورتی باید اجرا شود که *بخش try* هیچ استثنایی ایجاد نکرده باشد. برای " +"مثال::" #: ../../tutorial/errors.rst:222 msgid "" @@ -428,21 +513,35 @@ msgid "" " print(arg, 'has', len(f.readlines()), 'lines')\n" " f.close()" msgstr "" +"for arg in sys.argv[1:]:\n" +" try:\n" +" f = open(arg, 'r')\n" +" except OSError:\n" +" print('cannot open', arg)\n" +" else:\n" +" print(arg, 'has', len(f.readlines()), 'lines')\n" +" f.close()" #: ../../tutorial/errors.rst:231 msgid "" -"The use of the :keyword:`!else` clause is better than adding additional code " -"to the :keyword:`try` clause because it avoids accidentally catching an " -"exception that wasn't raised by the code being protected by the :keyword:`!" +"The use of the :keyword:`!else` clause is better than adding additional code to " +"the :keyword:`try` clause because it avoids accidentally catching an exception " +"that wasn't raised by the code being protected by the :keyword:`!" "try` ... :keyword:`!except` statement." msgstr "" +"استفاده از بند :keyword:`!else` بهتر از افزودن کد بیشتر به :keyword:`try` است، زیرا " +"از این که به‌طور ناخواسته استثنایی که توسط کد محافظت‌شده با دستور :keyword:`!" +"try` ... :keyword:`!except` ایجاد نشده است نیز گرفته شود، جلوگیری می‌کند." #: ../../tutorial/errors.rst:236 msgid "" -"Exception handlers do not handle only exceptions that occur immediately in " -"the *try clause*, but also those that occur inside functions that are called " -"(even indirectly) in the *try clause*. For example::" +"Exception handlers do not handle only exceptions that occur immediately in the " +"*try clause*, but also those that occur inside functions that are called (even " +"indirectly) in the *try clause*. For example::" msgstr "" +"رسیدگی‌کننده‌های استثنا فقط استثناهایی را که مستقیماً در *بخش try* رخ می‌دهند " +"مدیریت نمی‌کنند، بلکه استثناهایی را که درون توابعی که (حتی به‌طور غیرمستقیم) از " +"*بخش try* فراخوانی شده‌اند نیز رخ می‌دهند، مدیریت می‌کنند. برای مثال::" #: ../../tutorial/errors.rst:240 msgid "" @@ -456,16 +555,27 @@ msgid "" "...\n" "Handling run-time error: division by zero" msgstr "" +">>> def this_fails():\n" +"... x = 1/0\n" +"...\n" +">>> try:\n" +"... this_fails()\n" +"... except ZeroDivisionError as err:\n" +"... print('Handling run-time error:', err)\n" +"...\n" +"Handling run-time error: division by zero" #: ../../tutorial/errors.rst:254 msgid "Raising Exceptions" -msgstr "" +msgstr "ایجاد استثناها" #: ../../tutorial/errors.rst:256 msgid "" "The :keyword:`raise` statement allows the programmer to force a specified " "exception to occur. For example::" msgstr "" +"دستور :keyword:`raise` به برنامه‌نویس اجازه می‌دهد وقوع یک استثنای مشخص را به‌صورت " +"اجباری ایجاد کند. برای مثال::" #: ../../tutorial/errors.rst:259 msgid "" @@ -475,19 +585,29 @@ msgid "" " raise NameError('HiThere')\n" "NameError: HiThere" msgstr "" +">>> raise NameError('HiThere')\n" +"Traceback (most recent call last):\n" +" File \"\", line 1, in \n" +" raise NameError('HiThere')\n" +"NameError: HiThere" #: ../../tutorial/errors.rst:265 msgid "" "The sole argument to :keyword:`raise` indicates the exception to be raised. " -"This must be either an exception instance or an exception class (a class " -"that derives from :class:`BaseException`, such as :exc:`Exception` or one of " -"its subclasses). If an exception class is passed, it will be implicitly " +"This must be either an exception instance or an exception class (a class that " +"derives from :class:`BaseException`, such as :exc:`Exception` or one of its " +"subclasses). If an exception class is passed, it will be implicitly " "instantiated by calling its constructor with no arguments::" msgstr "" +"تنها آرگومان دستور :keyword:`raise` مشخص می‌کند که چه استثنایی باید ایجاد شود. " +"این آرگومان باید یا یک نمونهٔ استثنا (exception instance) باشد یا یک کلاس استثنا " +"(کلاسی که از :class:`BaseException` مشتق شده باشد، مانند :exc:`Exception` یا " +"یکی از زیرکلاس‌های آن). اگر یک کلاس استثنا ارسال شود، پایتون به‌طور ضمنی با " +"فراخوانی سازندهٔ آن بدون هیچ آرگومانی، یک نمونه از آن ایجاد می‌کند::" #: ../../tutorial/errors.rst:271 msgid "raise ValueError # shorthand for 'raise ValueError()'" -msgstr "" +msgstr "raise ValueError # shorthand for 'raise ValueError()'" #: ../../tutorial/errors.rst:273 msgid "" @@ -495,6 +615,9 @@ msgid "" "handle it, a simpler form of the :keyword:`raise` statement allows you to re-" "raise the exception::" msgstr "" +"اگر فقط لازم است تشخیص دهید که آیا استثنایی رخ داده است یا نه، اما قصد مدیریت " +"آن را ندارید، می‌توانید از شکل ساده‌تری از دستور :keyword:`raise` برای ایجاد مجدد " +"(re-raise) همان استثنا استفاده کنید::" #: ../../tutorial/errors.rst:277 msgid "" @@ -510,17 +633,30 @@ msgid "" " raise NameError('HiThere')\n" "NameError: HiThere" msgstr "" +">>> try:\n" +"... raise NameError('HiThere')\n" +"... except NameError:\n" +"... print('An exception flew by!')\n" +"... raise\n" +"...\n" +"An exception flew by!\n" +"Traceback (most recent call last):\n" +" File \"\", line 2, in \n" +" raise NameError('HiThere')\n" +"NameError: HiThere" #: ../../tutorial/errors.rst:293 msgid "Exception Chaining" -msgstr "" +msgstr "زنجیره‌سازی استثناها" #: ../../tutorial/errors.rst:295 msgid "" -"If an unhandled exception occurs inside an :keyword:`except` section, it " -"will have the exception being handled attached to it and included in the " -"error message::" +"If an unhandled exception occurs inside an :keyword:`except` section, it will " +"have the exception being handled attached to it and included in the error " +"message::" msgstr "" +"اگر درون یک بخش :keyword:`except` یک استثنای رسیدگی‌نشده رخ دهد، استثنایی که در " +"حال مدیریت شدن بود به آن متصل می‌شود و در پیام خطا نیز نمایش داده خواهد شد::" #: ../../tutorial/errors.rst:299 msgid "" @@ -542,6 +678,23 @@ msgid "" " raise RuntimeError(\"unable to handle error\")\n" "RuntimeError: unable to handle error" msgstr "" +">>> try:\n" +"... open(\"database.sqlite\")\n" +"... except OSError:\n" +"... raise RuntimeError(\"unable to handle error\")\n" +"...\n" +"Traceback (most recent call last):\n" +" File \"\", line 2, in \n" +" open(\"database.sqlite\")\n" +" ~~~~^^^^^^^^^^^^^^^^^^^\n" +"FileNotFoundError: [Errno 2] No such file or directory: 'database.sqlite'\n" +"\n" +"During handling of the above exception, another exception occurred:\n" +"\n" +"Traceback (most recent call last):\n" +" File \"\", line 4, in \n" +" raise RuntimeError(\"unable to handle error\")\n" +"RuntimeError: unable to handle error" #: ../../tutorial/errors.rst:317 msgid "" @@ -549,12 +702,17 @@ msgid "" "the :keyword:`raise` statement allows an optional :keyword:`from` " "clause::" msgstr "" +"برای نشان دادن این که یک استثنا پیامد مستقیم استثنای دیگری است، " +"دستور :keyword:`raise` یک بند اختیاری :keyword:`from` را در اختیار " +"می‌گذارد::" #: ../../tutorial/errors.rst:320 msgid "" "# exc must be exception instance or None.\n" "raise RuntimeError from exc" msgstr "" +"# exc must be exception instance or None.\n" +"raise RuntimeError from exc" #: ../../tutorial/errors.rst:323 msgid "This can be useful when you are transforming exceptions. For example::" @@ -584,11 +742,32 @@ msgid "" " raise RuntimeError('Failed to open database') from exc\n" "RuntimeError: Failed to open database" msgstr "" +">>> def func():\n" +"... raise ConnectionError\n" +"...\n" +">>> try:\n" +"... func()\n" +"... except ConnectionError as exc:\n" +"... raise RuntimeError('Failed to open database') from exc\n" +"...\n" +"Traceback (most recent call last):\n" +" File \"\", line 2, in \n" +" func()\n" +" ~~~~^^\n" +" File \"\", line 2, in func\n" +"ConnectionError\n" +"\n" +"The above exception was the direct cause of the following exception:\n" +"\n" +"Traceback (most recent call last):\n" +" File \"\", line 4, in \n" +" raise RuntimeError('Failed to open database') from exc\n" +"RuntimeError: Failed to open database" #: ../../tutorial/errors.rst:347 msgid "" -"It also allows disabling automatic exception chaining using the ``from " -"None`` idiom::" +"It also allows disabling automatic exception chaining using the ``from None`` " +"idiom::" msgstr "" #: ../../tutorial/errors.rst:350 @@ -603,6 +782,15 @@ msgid "" " raise RuntimeError from None\n" "RuntimeError" msgstr "" +">>> try:\n" +"... open('database.sqlite')\n" +"... except OSError:\n" +"... raise RuntimeError from None\n" +"...\n" +"Traceback (most recent call last):\n" +" File \"\", line 4, in \n" +" raise RuntimeError from None\n" +"RuntimeError" #: ../../tutorial/errors.rst:360 msgid "" @@ -623,10 +811,9 @@ msgstr "" #: ../../tutorial/errors.rst:372 msgid "" -"Exception classes can be defined which do anything any other class can do, " -"but are usually kept simple, often only offering a number of attributes that " -"allow information about the error to be extracted by handlers for the " -"exception." +"Exception classes can be defined which do anything any other class can do, but " +"are usually kept simple, often only offering a number of attributes that allow " +"information about the error to be extracted by handlers for the exception." msgstr "" #: ../../tutorial/errors.rst:376 @@ -647,9 +834,9 @@ msgstr "" #: ../../tutorial/errors.rst:388 msgid "" -"The :keyword:`try` statement has another optional clause which is intended " -"to define clean-up actions that must be executed under all circumstances. " -"For example::" +"The :keyword:`try` statement has another optional clause which is intended to " +"define clean-up actions that must be executed under all circumstances. For " +"example::" msgstr "" #: ../../tutorial/errors.rst:392 @@ -665,11 +852,21 @@ msgid "" " raise KeyboardInterrupt\n" "KeyboardInterrupt" msgstr "" +">>> try:\n" +"... raise KeyboardInterrupt\n" +"... finally:\n" +"... print('Goodbye, world!')\n" +"...\n" +"Goodbye, world!\n" +"Traceback (most recent call last):\n" +" File \"\", line 2, in \n" +" raise KeyboardInterrupt\n" +"KeyboardInterrupt" #: ../../tutorial/errors.rst:403 msgid "" -"If a :keyword:`finally` clause is present, the :keyword:`!finally` clause " -"will execute as the last task before the :keyword:`try` statement completes. " +"If a :keyword:`finally` clause is present, the :keyword:`!finally` clause will " +"execute as the last task before the :keyword:`try` statement completes. " "The :keyword:`!finally` clause runs whether or not the :keyword:`!try` " "statement produces an exception. The following points discuss more complex " "cases when an exception occurs:" @@ -679,8 +876,8 @@ msgstr "" msgid "" "If an exception occurs during execution of the :keyword:`!try` clause, the " "exception may be handled by an :keyword:`except` clause. If the exception is " -"not handled by an :keyword:`!except` clause, the exception is re-raised " -"after the :keyword:`!finally` clause has been executed." +"not handled by an :keyword:`!except` clause, the exception is re-raised after " +"the :keyword:`!finally` clause has been executed." msgstr "" #: ../../tutorial/errors.rst:415 @@ -695,8 +892,8 @@ msgid "" "If the :keyword:`!finally` clause executes " "a :keyword:`break`, :keyword:`continue` or :keyword:`return` statement, " "exceptions are not re-raised. This can be confusing and is therefore " -"discouraged. From version 3.14 the compiler emits a :exc:`SyntaxWarning` for " -"it (see :pep:`765`)." +"discouraged. From version 3.14 the compiler emits a :exc:`SyntaxWarning` for it " +"(see :pep:`765`)." msgstr "" #: ../../tutorial/errors.rst:425 @@ -710,11 +907,10 @@ msgstr "" #: ../../tutorial/errors.rst:431 msgid "" "If a :keyword:`!finally` clause includes a :keyword:`!return` statement, the " -"returned value will be the one from the :keyword:`!finally` " -"clause's :keyword:`!return` statement, not the value from the :keyword:`!" -"try` clause's :keyword:`!return` statement. This can be confusing and is " -"therefore discouraged. From version 3.14 the compiler emits " -"a :exc:`SyntaxWarning` for it (see :pep:`765`)." +"returned value will be the one from the :keyword:`!finally` clause's :keyword:`!" +"return` statement, not the value from the :keyword:`!try` clause's :keyword:`!" +"return` statement. This can be confusing and is therefore discouraged. From " +"version 3.14 the compiler emits a :exc:`SyntaxWarning` for it (see :pep:`765`)." msgstr "" #: ../../tutorial/errors.rst:439 @@ -732,6 +928,14 @@ msgid "" ">>> bool_return()\n" "False" msgstr "" +">>> def bool_return():\n" +"... try:\n" +"... return True\n" +"... finally:\n" +"... return False\n" +"...\n" +">>> bool_return()\n" +"False" #: ../../tutorial/errors.rst:450 msgid "A more complicated example::" @@ -766,6 +970,32 @@ msgid "" " ~~^~~\n" "TypeError: unsupported operand type(s) for /: 'str' and 'str'" msgstr "" +">>> def divide(x, y):\n" +"... try:\n" +"... result = x / y\n" +"... except ZeroDivisionError:\n" +"... print(\"division by zero!\")\n" +"... else:\n" +"... print(\"result is\", result)\n" +"... finally:\n" +"... print(\"executing finally clause\")\n" +"...\n" +">>> divide(2, 1)\n" +"result is 2.0\n" +"executing finally clause\n" +">>> divide(2, 0)\n" +"division by zero!\n" +"executing finally clause\n" +">>> divide(\"2\", \"1\")\n" +"executing finally clause\n" +"Traceback (most recent call last):\n" +" File \"\", line 1, in \n" +" divide(\"2\", \"1\")\n" +" ~~~~~~^^^^^^^^^^\n" +" File \"\", line 3, in divide\n" +" result = x / y\n" +" ~~^~~\n" +"TypeError: unsupported operand type(s) for /: 'str' and 'str'" #: ../../tutorial/errors.rst:479 msgid "" @@ -778,8 +1008,8 @@ msgstr "" #: ../../tutorial/errors.rst:484 msgid "" "In real world applications, the :keyword:`finally` clause is useful for " -"releasing external resources (such as files or network connections), " -"regardless of whether the use of the resource was successful." +"releasing external resources (such as files or network connections), regardless " +"of whether the use of the resource was successful." msgstr "" #: ../../tutorial/errors.rst:492 @@ -788,10 +1018,10 @@ msgstr "" #: ../../tutorial/errors.rst:494 msgid "" -"Some objects define standard clean-up actions to be undertaken when the " -"object is no longer needed, regardless of whether or not the operation using " -"the object succeeded or failed. Look at the following example, which tries " -"to open a file and print its contents to the screen. ::" +"Some objects define standard clean-up actions to be undertaken when the object " +"is no longer needed, regardless of whether or not the operation using the " +"object succeeded or failed. Look at the following example, which tries to open " +"a file and print its contents to the screen. ::" msgstr "" #: ../../tutorial/errors.rst:499 @@ -799,15 +1029,16 @@ msgid "" "for line in open(\"myfile.txt\"):\n" " print(line, end=\"\")" msgstr "" +"for line in open(\"myfile.txt\"):\n" +" print(line, end=\"\")" #: ../../tutorial/errors.rst:502 msgid "" -"The problem with this code is that it leaves the file open for an " -"indeterminate amount of time after this part of the code has finished " -"executing. This is not an issue in simple scripts, but can be a problem for " -"larger applications. The :keyword:`with` statement allows objects like files " -"to be used in a way that ensures they are always cleaned up promptly and " -"correctly. ::" +"The problem with this code is that it leaves the file open for an indeterminate " +"amount of time after this part of the code has finished executing. This is not " +"an issue in simple scripts, but can be a problem for larger applications. " +"The :keyword:`with` statement allows objects like files to be used in a way " +"that ensures they are always cleaned up promptly and correctly. ::" msgstr "" #: ../../tutorial/errors.rst:508 @@ -816,13 +1047,15 @@ msgid "" " for line in f:\n" " print(line, end=\"\")" msgstr "" +"with open(\"myfile.txt\") as f:\n" +" for line in f:\n" +" print(line, end=\"\")" #: ../../tutorial/errors.rst:512 msgid "" "After the statement is executed, the file *f* is always closed, even if a " -"problem was encountered while processing the lines. Objects which, like " -"files, provide predefined clean-up actions will indicate this in their " -"documentation." +"problem was encountered while processing the lines. Objects which, like files, " +"provide predefined clean-up actions will indicate this in their documentation." msgstr "" #: ../../tutorial/errors.rst:520 @@ -832,17 +1065,17 @@ msgstr "" #: ../../tutorial/errors.rst:522 msgid "" "There are situations where it is necessary to report several exceptions that " -"have occurred. This is often the case in concurrency frameworks, when " -"several tasks may have failed in parallel, but there are also other use " -"cases where it is desirable to continue execution and collect multiple " -"errors rather than raise the first exception." +"have occurred. This is often the case in concurrency frameworks, when several " +"tasks may have failed in parallel, but there are also other use cases where it " +"is desirable to continue execution and collect multiple errors rather than " +"raise the first exception." msgstr "" #: ../../tutorial/errors.rst:528 msgid "" -"The builtin :exc:`ExceptionGroup` wraps a list of exception instances so " -"that they can be raised together. It is an exception itself, so it can be " -"caught like any other exception. ::" +"The builtin :exc:`ExceptionGroup` wraps a list of exception instances so that " +"they can be raised together. It is an exception itself, so it can be caught " +"like any other exception. ::" msgstr "" #: ../../tutorial/errors.rst:532 @@ -872,14 +1105,38 @@ msgid "" "caught : there were problems (2 sub-exceptions)\n" ">>>" msgstr "" +">>> def f():\n" +"... excs = [OSError('error 1'), SystemError('error 2')]\n" +"... raise ExceptionGroup('there were problems', excs)\n" +"...\n" +">>> f()\n" +" + Exception Group Traceback (most recent call last):\n" +" | File \"\", line 1, in \n" +" | f()\n" +" | ~^^\n" +" | File \"\", line 3, in f\n" +" | raise ExceptionGroup('there were problems', excs)\n" +" | ExceptionGroup: there were problems (2 sub-exceptions)\n" +" +-+---------------- 1 ----------------\n" +" | OSError: error 1\n" +" +---------------- 2 ----------------\n" +" | SystemError: error 2\n" +" +------------------------------------\n" +">>> try:\n" +"... f()\n" +"... except Exception as e:\n" +"... print(f'caught {type(e)}: {e}')\n" +"...\n" +"caught : there were problems (2 sub-exceptions)\n" +">>>" #: ../../tutorial/errors.rst:557 msgid "" -"By using ``except*`` instead of ``except``, we can selectively handle only " -"the exceptions in the group that match a certain type. In the following " -"example, which shows a nested exception group, each ``except*`` clause " -"extracts from the group exceptions of a certain type while letting all other " -"exceptions propagate to other clauses and eventually to be reraised. ::" +"By using ``except*`` instead of ``except``, we can selectively handle only the " +"exceptions in the group that match a certain type. In the following example, " +"which shows a nested exception group, each ``except*`` clause extracts from the " +"group exceptions of a certain type while letting all other exceptions propagate " +"to other clauses and eventually to be reraised. ::" msgstr "" #: ../../tutorial/errors.rst:564 @@ -925,12 +1182,52 @@ msgid "" " +------------------------------------\n" ">>>" msgstr "" +">>> def f():\n" +"... raise ExceptionGroup(\n" +"... \"group1\",\n" +"... [\n" +"... OSError(1),\n" +"... SystemError(2),\n" +"... ExceptionGroup(\n" +"... \"group2\",\n" +"... [\n" +"... OSError(3),\n" +"... RecursionError(4)\n" +"... ]\n" +"... )\n" +"... ]\n" +"... )\n" +"...\n" +">>> try:\n" +"... f()\n" +"... except* OSError as e:\n" +"... print(\"There were OSErrors\")\n" +"... except* SystemError as e:\n" +"... print(\"There were SystemErrors\")\n" +"...\n" +"There were OSErrors\n" +"There were SystemErrors\n" +" + Exception Group Traceback (most recent call last):\n" +" | File \"\", line 2, in \n" +" | f()\n" +" | ~^^\n" +" | File \"\", line 2, in f\n" +" | raise ExceptionGroup(\n" +" | ...<12 lines>...\n" +" | )\n" +" | ExceptionGroup: group1 (1 sub-exception)\n" +" +-+---------------- 1 ----------------\n" +" | ExceptionGroup: group2 (1 sub-exception)\n" +" +-+---------------- 1 ----------------\n" +" | RecursionError: 4\n" +" +------------------------------------\n" +">>>" #: ../../tutorial/errors.rst:605 msgid "" "Note that the exceptions nested in an exception group must be instances, not " -"types. This is because in practice the exceptions would typically be ones " -"that have already been raised and caught by the program, along the following " +"types. This is because in practice the exceptions would typically be ones that " +"have already been raised and caught by the program, along the following " "pattern::" msgstr "" @@ -947,6 +1244,16 @@ msgid "" "... raise ExceptionGroup(\"Test Failures\", excs)\n" "..." msgstr "" +">>> excs = []\n" +"... for test in tests:\n" +"... try:\n" +"... test.run()\n" +"... except Exception as e:\n" +"... excs.append(e)\n" +"...\n" +">>> if excs:\n" +"... raise ExceptionGroup(\"Test Failures\", excs)\n" +"..." #: ../../tutorial/errors.rst:625 msgid "Enriching Exceptions with Notes" @@ -954,13 +1261,12 @@ msgstr "" #: ../../tutorial/errors.rst:627 msgid "" -"When an exception is created in order to be raised, it is usually " -"initialized with information that describes the error that has occurred. " -"There are cases where it is useful to add information after the exception " -"was caught. For this purpose, exceptions have a method ``add_note(note)`` " -"that accepts a string and adds it to the exception's notes list. The " -"standard traceback rendering includes all notes, in the order they were " -"added, after the exception. ::" +"When an exception is created in order to be raised, it is usually initialized " +"with information that describes the error that has occurred. There are cases " +"where it is useful to add information after the exception was caught. For this " +"purpose, exceptions have a method ``add_note(note)`` that accepts a string and " +"adds it to the exception's notes list. The standard traceback rendering " +"includes all notes, in the order they were added, after the exception. ::" msgstr "" #: ../../tutorial/errors.rst:634 @@ -980,11 +1286,25 @@ msgid "" "Add some more information\n" ">>>" msgstr "" +">>> try:\n" +"... raise TypeError('bad type')\n" +"... except Exception as e:\n" +"... e.add_note('Add some information')\n" +"... e.add_note('Add some more information')\n" +"... raise\n" +"...\n" +"Traceback (most recent call last):\n" +" File \"\", line 2, in \n" +" raise TypeError('bad type')\n" +"TypeError: bad type\n" +"Add some information\n" +"Add some more information\n" +">>>" #: ../../tutorial/errors.rst:649 msgid "" -"For example, when collecting exceptions into an exception group, we may want " -"to add context information for the individual errors. In the following each " +"For example, when collecting exceptions into an exception group, we may want to " +"add context information for the individual errors. In the following each " "exception in the group has a note indicating when this error has occurred. ::" msgstr "" @@ -1036,3 +1356,48 @@ msgid "" " +------------------------------------\n" ">>>" msgstr "" +">>> def f():\n" +"... raise OSError('operation failed')\n" +"...\n" +">>> excs = []\n" +">>> for i in range(3):\n" +"... try:\n" +"... f()\n" +"... except Exception as e:\n" +"... e.add_note(f'Happened in Iteration {i+1}')\n" +"... excs.append(e)\n" +"...\n" +">>> raise ExceptionGroup('We have some problems', excs)\n" +" + Exception Group Traceback (most recent call last):\n" +" | File \"\", line 1, in \n" +" | raise ExceptionGroup('We have some problems', excs)\n" +" | ExceptionGroup: We have some problems (3 sub-exceptions)\n" +" +-+---------------- 1 ----------------\n" +" | Traceback (most recent call last):\n" +" | File \"\", line 3, in \n" +" | f()\n" +" | ~^^\n" +" | File \"\", line 2, in f\n" +" | raise OSError('operation failed')\n" +" | OSError: operation failed\n" +" | Happened in Iteration 1\n" +" +---------------- 2 ----------------\n" +" | Traceback (most recent call last):\n" +" | File \"\", line 3, in \n" +" | f()\n" +" | ~^^\n" +" | File \"\", line 2, in f\n" +" | raise OSError('operation failed')\n" +" | OSError: operation failed\n" +" | Happened in Iteration 2\n" +" +---------------- 3 ----------------\n" +" | Traceback (most recent call last):\n" +" | File \"\", line 3, in \n" +" | f()\n" +" | ~^^\n" +" | File \"\", line 2, in f\n" +" | raise OSError('operation failed')\n" +" | OSError: operation failed\n" +" | Happened in Iteration 3\n" +" +------------------------------------\n" +">>>" diff --git a/tutorial/stdlib.po b/tutorial/stdlib.po index 8ef7bd1..5ad2cc2 100644 --- a/tutorial/stdlib.po +++ b/tutorial/stdlib.po @@ -12,10 +12,9 @@ msgstr "" "Project-Id-Version: Python 3.14\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-25 12:59+0330\n" -"PO-Revision-Date: 2026-08-01 16:31+0330\n" +"PO-Revision-Date: 2026-08-02 18:57+0330\n" "Last-Translator: Alireza Shabani (Revisto) , 2025\n" -"Language-Team: Persian (https://app.transifex.com/python-doc/teams/5390/" -"fa/)\n" +"Language-Team: Persian (https://app.transifex.com/python-doc/teams/5390/fa/)\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -55,18 +54,18 @@ msgstr "" #: ../../tutorial/stdlib.rst:23 msgid "" -"Be sure to use the ``import os`` style instead of ``from os import *``. " -"This will keep :func:`os.open` from shadowing the built-in :func:`open` " -"function which operates much differently." +"Be sure to use the ``import os`` style instead of ``from os import *``. This " +"will keep :func:`os.open` from shadowing the built-in :func:`open` function " +"which operates much differently." msgstr "" -"حتماً از سبک ``import os`` به‌جای ``from os import *`` استفاده کنید. این کار " -"باعث می‌شود :func:`os.open` روی تابع داخلی :func:`open` که عملکرد کاملاً " -"متفاوتی دارد، سایه نیندازد." +"حتماً از سبک ``import os`` به‌جای ``from os import *`` استفاده کنید. این کار باعث " +"می‌شود :func:`os.open` روی تابع داخلی :func:`open` که عملکرد کاملاً متفاوتی دارد، " +"سایه نیندازد." #: ../../tutorial/stdlib.rst:29 msgid "" -"The built-in :func:`dir` and :func:`help` functions are useful as " -"interactive aids for working with large modules like :mod:`os`::" +"The built-in :func:`dir` and :func:`help` functions are useful as interactive " +"aids for working with large modules like :mod:`os`::" msgstr "" "توابع داخلی :func:`dir` و :func:`help` به‌عنوان ابزارهای تعاملی برای کار با " "ماژول‌های بزرگی مانند :mod:`os` مفید هستند::" @@ -87,8 +86,8 @@ msgstr "" #: ../../tutorial/stdlib.rst:38 msgid "" -"For daily file and directory management tasks, the :mod:`shutil` module " -"provides a higher level interface that is easier to use::" +"For daily file and directory management tasks, the :mod:`shutil` module provides " +"a higher level interface that is easier to use::" msgstr "" "برای کارهای روزمرهٔ مدیریت فایل‌ها و پوشه‌ها، ماژول :mod:`shutil` یک رابط سطح " "بالاتر ارائه می‌دهد که استفاده از آن ساده‌تر است::" @@ -113,11 +112,11 @@ msgstr "الگوهای عام فایل" #: ../../tutorial/stdlib.rst:53 msgid "" -"The :mod:`glob` module provides a function for making file lists from " -"directory wildcard searches::" +"The :mod:`glob` module provides a function for making file lists from directory " +"wildcard searches::" msgstr "" -"ماژول :mod:`glob` تابعی برای ساخت فهرستی از فایل‌ها با استفاده از جستجوهای " -"الگوی عام در پوشه‌ها فراهم می‌کند::" +"ماژول :mod:`glob` تابعی برای ساخت فهرستی از فایل‌ها با استفاده از جستجوهای الگوی " +"عام در پوشه‌ها فراهم می‌کند::" #: ../../tutorial/stdlib.rst:56 msgid "" @@ -136,12 +135,12 @@ msgstr "آرگومان‌های خط فرمان" #: ../../tutorial/stdlib.rst:66 msgid "" "Common utility scripts often need to process command line arguments. These " -"arguments are stored in the :mod:`sys` module's *argv* attribute as a list. " -"For instance, let's take the following :file:`demo.py` file::" +"arguments are stored in the :mod:`sys` module's *argv* attribute as a list. For " +"instance, let's take the following :file:`demo.py` file::" msgstr "" "اسکریپت‌های کاربردی معمولاً نیاز دارند آرگومان‌های خط فرمان را پردازش کنند. این " -"آرگومان‌ها در ویژگی *argv* ماژول :mod:`sys` به‌صورت یک فهرست ذخیره می‌شوند. " -"برای مثال، فایل :file:`demo.py` زیر را در نظر بگیرید::" +"آرگومان‌ها در ویژگی *argv* ماژول :mod:`sys` به‌صورت یک فهرست ذخیره می‌شوند. برای " +"مثال، فایل :file:`demo.py` زیر را در نظر بگیرید::" #: ../../tutorial/stdlib.rst:70 msgid "" @@ -155,10 +154,9 @@ msgstr "" #: ../../tutorial/stdlib.rst:74 msgid "" -"Here is the output from running ``python demo.py one two three`` at the " -"command line::" -msgstr "" -"خروجی اجرای ``python demo.py one two three`` در خط فرمان به شکل زیر است::" +"Here is the output from running ``python demo.py one two three`` at the command " +"line::" +msgstr "خروجی اجرای ``python demo.py one two three`` در خط فرمان به شکل زیر است::" #: ../../tutorial/stdlib.rst:77 msgid "['demo.py', 'one', 'two', 'three']" @@ -166,13 +164,13 @@ msgstr "['demo.py', 'one', 'two', 'three']" #: ../../tutorial/stdlib.rst:79 msgid "" -"The :mod:`argparse` module provides a more sophisticated mechanism to " -"process command line arguments. The following script extracts one or more " -"filenames and an optional number of lines to be displayed::" +"The :mod:`argparse` module provides a more sophisticated mechanism to process " +"command line arguments. The following script extracts one or more filenames and " +"an optional number of lines to be displayed::" msgstr "" -"ماژول :mod:`argparse` سازوکار پیشرفته‌تری برای پردازش آرگومان‌های خط فرمان " -"فراهم می‌کند. اسکریپت زیر یک یا چند نام فایل و همچنین تعداد اختیاری خطوطی که " -"باید نمایش داده شوند را استخراج می‌کند::" +"ماژول :mod:`argparse` سازوکار پیشرفته‌تری برای پردازش آرگومان‌های خط فرمان فراهم " +"می‌کند. اسکریپت زیر یک یا چند نام فایل و همچنین تعداد اختیاری خطوطی که باید نمایش " +"داده شوند را استخراج می‌کند::" #: ../../tutorial/stdlib.rst:83 msgid "" @@ -199,12 +197,12 @@ msgstr "" #: ../../tutorial/stdlib.rst:93 msgid "" "When run at the command line with ``python top.py --lines=5 alpha.txt " -"beta.txt``, the script sets ``args.lines`` to ``5`` and ``args.filenames`` " -"to ``['alpha.txt', 'beta.txt']``." +"beta.txt``, the script sets ``args.lines`` to ``5`` and ``args.filenames`` to " +"``['alpha.txt', 'beta.txt']``." msgstr "" -"هنگامی که این اسکریپت با دستور ``python top.py --lines=5 alpha.txt " -"beta.txt`` در خط فرمان اجرا شود، اسکریپت مقدار ``args.lines`` را برابر ``5`` " -"و مقدار ``args.filenames`` را برابر ``['alpha.txt', 'beta.txt']`` قرار می‌دهد." +"هنگامی که این اسکریپت با دستور ``python top.py --lines=5 alpha.txt beta.txt`` در " +"خط فرمان اجرا شود، اسکریپت مقدار ``args.lines`` را برابر ``5`` و مقدار " +"``args.filenames`` را برابر ``['alpha.txt', 'beta.txt']`` قرار می‌دهد." #: ../../tutorial/stdlib.rst:101 msgid "Error output redirection and program termination" @@ -212,13 +210,13 @@ msgstr "تغییر مسیر خروجی خطا و پایان دادن به برن #: ../../tutorial/stdlib.rst:103 msgid "" -"The :mod:`sys` module also has attributes for *stdin*, *stdout*, and " -"*stderr*. The latter is useful for emitting warnings and error messages to " -"make them visible even when *stdout* has been redirected::" +"The :mod:`sys` module also has attributes for *stdin*, *stdout*, and *stderr*. " +"The latter is useful for emitting warnings and error messages to make them " +"visible even when *stdout* has been redirected::" msgstr "" -"ماژول :mod:`sys` همچنین ویژگی‌هایی برای *stdin*، *stdout* و *stderr* دارد. " -"مورد آخر برای ارسال هشدارها و پیام‌های خطا مفید است، زیرا حتی زمانی که " -"*stdout* تغییر مسیر داده شده باشد، این پیام‌ها همچنان قابل مشاهده خواهند بود::" +"ماژول :mod:`sys` همچنین ویژگی‌هایی برای *stdin*، *stdout* و *stderr* دارد. مورد " +"آخر برای ارسال هشدارها و پیام‌های خطا مفید است، زیرا حتی زمانی که *stdout* تغییر " +"مسیر داده شده باشد، این پیام‌ها همچنان قابل مشاهده خواهند بود::" #: ../../tutorial/stdlib.rst:107 msgid "" @@ -263,11 +261,11 @@ msgstr "" #: ../../tutorial/stdlib.rst:128 msgid "" -"When only simple capabilities are needed, string methods are preferred " -"because they are easier to read and debug::" +"When only simple capabilities are needed, string methods are preferred because " +"they are easier to read and debug::" msgstr "" -"وقتی فقط به قابلیت‌های ساده نیاز است، استفاده از متدهای رشته‌ای ترجیح داده " -"می‌شود، زیرا خواندن و اشکال‌زدایی آن‌ها آسان‌تر است::" +"وقتی فقط به قابلیت‌های ساده نیاز است، استفاده از متدهای رشته‌ای ترجیح داده می‌شود، " +"زیرا خواندن و اشکال‌زدایی آن‌ها آسان‌تر است::" #: ../../tutorial/stdlib.rst:131 msgid "" @@ -283,11 +281,11 @@ msgstr "ریاضیات" #: ../../tutorial/stdlib.rst:140 msgid "" -"The :mod:`math` module gives access to the underlying C library functions " -"for floating-point math::" +"The :mod:`math` module gives access to the underlying C library functions for " +"floating-point math::" msgstr "" -"ماژول :mod:`math` دسترسی به توابع کتابخانهٔ C زیرین برای محاسبات ممیز شناور " -"را فراهم می‌کند::" +"ماژول :mod:`math` دسترسی به توابع کتابخانهٔ C زیرین برای محاسبات ممیز شناور را " +"فراهم می‌کند::" #: ../../tutorial/stdlib.rst:143 msgid "" @@ -331,8 +329,8 @@ msgstr "" #: ../../tutorial/stdlib.rst:161 msgid "" -"The :mod:`statistics` module calculates basic statistical properties (the " -"mean, median, variance, etc.) of numeric data::" +"The :mod:`statistics` module calculates basic statistical properties (the mean, " +"median, variance, etc.) of numeric data::" msgstr "" "ماژول :mod:`statistics` ویژگی‌های آماری پایه (مانند میانگین، میانه، واریانس و " "غیره) داده‌های عددی را محاسبه می‌کند::" @@ -370,12 +368,12 @@ msgstr "دسترسی به اینترنت" #: ../../tutorial/stdlib.rst:181 msgid "" -"There are a number of modules for accessing the internet and processing " -"internet protocols. Two of the simplest are :mod:`urllib.request` for " -"retrieving data from URLs and :mod:`smtplib` for sending mail::" +"There are a number of modules for accessing the internet and processing internet " +"protocols. Two of the simplest are :mod:`urllib.request` for retrieving data " +"from URLs and :mod:`smtplib` for sending mail::" msgstr "" -"تعدادی ماژول برای دسترسی به اینترنت و پردازش پروتکل‌های اینترنتی وجود دارد. " -"دو مورد از ساده‌ترین آن‌ها :mod:`urllib.request` برای دریافت داده از URLها " +"تعدادی ماژول برای دسترسی به اینترنت و پردازش پروتکل‌های اینترنتی وجود دارد. دو " +"مورد از ساده‌ترین آن‌ها :mod:`urllib.request` برای دریافت داده از URLها " "و :mod:`smtplib` برای ارسال ایمیل هستند::" #: ../../tutorial/stdlib.rst:185 @@ -429,17 +427,16 @@ msgstr "تاریخ‌ها و زمان‌ها" #: ../../tutorial/stdlib.rst:212 msgid "" -"The :mod:`datetime` module supplies classes for manipulating dates and times " -"in both simple and complex ways. While date and time arithmetic is " -"supported, the focus of the implementation is on efficient member extraction " -"for output formatting and manipulation. The module also supports objects " -"that are timezone aware. ::" +"The :mod:`datetime` module supplies classes for manipulating dates and times in " +"both simple and complex ways. While date and time arithmetic is supported, the " +"focus of the implementation is on efficient member extraction for output " +"formatting and manipulation. The module also supports objects that are timezone " +"aware. ::" msgstr "" "ماژول :mod:`datetime` کلاس‌هایی برای کار با تاریخ‌ها و زمان‌ها به روش‌های ساده و " "پیچیده فراهم می‌کند. با اینکه محاسبات مربوط به تاریخ و زمان پشتیبانی می‌شوند، " -"تمرکز اصلی پیاده‌سازی بر استخراج کارآمد اعضا برای قالب‌بندی خروجی و تغییرات " -"است. این ماژول همچنین از اشیایی که نسبت به منطقهٔ زمانی آگاه هستند پشتیبانی " -"می‌کند.::" +"تمرکز اصلی پیاده‌سازی بر استخراج کارآمد اعضا برای قالب‌بندی خروجی و تغییرات است. " +"این ماژول همچنین از اشیایی که نسبت به منطقهٔ زمانی آگاه هستند پشتیبانی می‌کند.::" #: ../../tutorial/stdlib.rst:218 msgid "" @@ -477,8 +474,7 @@ msgstr "فشرده‌سازی داده‌ها" #: ../../tutorial/stdlib.rst:238 msgid "" -"Common data archiving and compression formats are directly supported by " -"modules " +"Common data archiving and compression formats are directly supported by modules " "including: :mod:`zlib`, :mod:`gzip`, :mod:`bz2`, :mod:`lzma`, :mod:`zipfile` " "and :mod:`tarfile`. ::" msgstr "" @@ -518,24 +514,23 @@ msgstr "اندازه‌گیری کارایی" #: ../../tutorial/stdlib.rst:260 msgid "" -"Some Python users develop a deep interest in knowing the relative " -"performance of different approaches to the same problem. Python provides a " -"measurement tool that answers those questions immediately." +"Some Python users develop a deep interest in knowing the relative performance of " +"different approaches to the same problem. Python provides a measurement tool " +"that answers those questions immediately." msgstr "" "برخی کاربران پایتون علاقهٔ زیادی دارند که کارایی نسبی روش‌های مختلف برای حل یک " -"مسئلهٔ یکسان را بدانند. پایتون ابزاری برای اندازه‌گیری فراهم می‌کند که بلافاصله " -"به این پرسش‌ها پاسخ می‌دهد." +"مسئلهٔ یکسان را بدانند. پایتون ابزاری برای اندازه‌گیری فراهم می‌کند که بلافاصله به " +"این پرسش‌ها پاسخ می‌دهد." #: ../../tutorial/stdlib.rst:264 msgid "" -"For example, it may be tempting to use the tuple packing and unpacking " -"feature instead of the traditional approach to swapping arguments. " -"The :mod:`timeit` module quickly demonstrates a modest performance " -"advantage::" +"For example, it may be tempting to use the tuple packing and unpacking feature " +"instead of the traditional approach to swapping arguments. The :mod:`timeit` " +"module quickly demonstrates a modest performance advantage::" msgstr "" -"برای مثال، ممکن است وسوسه شوید که به‌جای روش سنتی جابه‌جایی آرگومان‌ها، از " -"قابلیت بسته‌بندی و بازکردن تاپل‌ها استفاده کنید. ماژول :mod:`timeit` به‌سرعت یک " -"برتری کوچک در کارایی را نشان می‌دهد::" +"برای مثال، ممکن است وسوسه شوید که به‌جای روش سنتی جابه‌جایی آرگومان‌ها، از قابلیت " +"بسته‌بندی و بازکردن تاپل‌ها استفاده کنید. ماژول :mod:`timeit` به‌سرعت یک برتری کوچک " +"در کارایی را نشان می‌دهد::" #: ../../tutorial/stdlib.rst:268 msgid "" @@ -554,12 +549,12 @@ msgstr "" #: ../../tutorial/stdlib.rst:274 msgid "" "In contrast to :mod:`timeit`'s fine level of granularity, the :mod:`profile` " -"and :mod:`pstats` modules provide tools for identifying time critical " -"sections in larger blocks of code." +"and :mod:`pstats` modules provide tools for identifying time critical sections " +"in larger blocks of code." msgstr "" "برخلاف دقت بسیار بالای :mod:`timeit` در اندازه‌گیری‌های کوچک، " -"ماژول‌های :mod:`profile` و :mod:`pstats` ابزارهایی برای شناسایی بخش‌های حساس " -"از نظر زمانی در قطعه‌کدهای بزرگ‌تر فراهم می‌کنند." +"ماژول‌های :mod:`profile` و :mod:`pstats` ابزارهایی برای شناسایی بخش‌های حساس از " +"نظر زمانی در قطعه‌کدهای بزرگ‌تر فراهم می‌کنند." #: ../../tutorial/stdlib.rst:282 msgid "Quality control" @@ -571,25 +566,24 @@ msgid "" "function as it is developed and to run those tests frequently during the " "development process." msgstr "" -"یکی از روش‌ها برای توسعهٔ نرم‌افزار با کیفیت بالا این است که برای هر تابع، " -"هم‌زمان با توسعهٔ آن، آزمون‌هایی نوشته شود و این آزمون‌ها در طول فرایند توسعه " -"به‌طور مکرر اجرا شوند." +"یکی از روش‌ها برای توسعهٔ نرم‌افزار با کیفیت بالا این است که برای هر تابع، هم‌زمان " +"با توسعهٔ آن، آزمون‌هایی نوشته شود و این آزمون‌ها در طول فرایند توسعه به‌طور مکرر " +"اجرا شوند." #: ../../tutorial/stdlib.rst:288 msgid "" -"The :mod:`doctest` module provides a tool for scanning a module and " -"validating tests embedded in a program's docstrings. Test construction is " -"as simple as cutting-and-pasting a typical call along with its results into " -"the docstring. This improves the documentation by providing the user with an " -"example and it allows the doctest module to make sure the code remains true " -"to the documentation::" +"The :mod:`doctest` module provides a tool for scanning a module and validating " +"tests embedded in a program's docstrings. Test construction is as simple as " +"cutting-and-pasting a typical call along with its results into the docstring. " +"This improves the documentation by providing the user with an example and it " +"allows the doctest module to make sure the code remains true to the " +"documentation::" msgstr "" -"ماژول :mod:`doctest` ابزاری برای پیمایش یک ماژول و اعتبارسنجی آزمون‌هایی که " -"در رشته‌های مستندات (docstring) برنامه قرار داده شده‌اند فراهم می‌کند. ساخت " -"آزمون‌ها به سادگیِ کپی‌کردن یک فراخوانی معمولی به همراه نتیجهٔ آن در docstring " -"است. این کار مستندات را بهتر می‌کند، زیرا نمونه‌ای برای کاربر فراهم می‌کند و " -"همچنین به ماژول doctest اجازه می‌دهد اطمینان حاصل کند که کد همچنان مطابق با " -"مستندات عمل می‌کند::" +"ماژول :mod:`doctest` ابزاری برای پیمایش یک ماژول و اعتبارسنجی آزمون‌هایی که در " +"رشته‌های مستندات (docstring) برنامه قرار داده شده‌اند فراهم می‌کند. ساخت آزمون‌ها به " +"سادگیِ کپی‌کردن یک فراخوانی معمولی به همراه نتیجهٔ آن در docstring است. این کار " +"مستندات را بهتر می‌کند، زیرا نمونه‌ای برای کاربر فراهم می‌کند و همچنین به ماژول " +"doctest اجازه می‌دهد اطمینان حاصل کند که کد همچنان مطابق با مستندات عمل می‌کند::" #: ../../tutorial/stdlib.rst:295 msgid "" @@ -617,12 +611,12 @@ msgstr "" #: ../../tutorial/stdlib.rst:306 msgid "" -"The :mod:`unittest` module is not as effortless as the :mod:`doctest` " -"module, but it allows a more comprehensive set of tests to be maintained in " -"a separate file::" +"The :mod:`unittest` module is not as effortless as the :mod:`doctest` module, " +"but it allows a more comprehensive set of tests to be maintained in a separate " +"file::" msgstr "" -"ماژول :mod:`unittest` به اندازهٔ :mod:`doctest` ساده و بدون زحمت نیست، اما " -"اجازه می‌دهد مجموعه‌ای جامع‌تر از آزمون‌ها در یک فایل جداگانه نگهداری شود::" +"ماژول :mod:`unittest` به اندازهٔ :mod:`doctest` ساده و بدون زحمت نیست، اما اجازه " +"می‌دهد مجموعه‌ای جامع‌تر از آزمون‌ها در یک فایل جداگانه نگهداری شود::" #: ../../tutorial/stdlib.rst:310 msgid "" @@ -660,59 +654,79 @@ msgstr "همه‌چیز آماده درون جعبه" #: ../../tutorial/stdlib.rst:330 msgid "" -"Python has a \"batteries included\" philosophy. This is best seen through " -"the sophisticated and robust capabilities of its larger packages. For " -"example:" +"Python has a \"batteries included\" philosophy. This is best seen through the " +"sophisticated and robust capabilities of its larger packages. For example:" msgstr "" -"پایتون از فلسفهٔ «همه‌چیز آماده درون جعبه» (batteries included) پیروی می‌کند. " -"این موضوع را می‌توان به بهترین شکل در قابلیت‌های پیشرفته و قدرتمند بسته‌های " -"بزرگ‌تر آن مشاهده کرد. برای مثال:" +"پایتون از فلسفهٔ «همه‌چیز آماده درون جعبه» (batteries included) پیروی می‌کند. این " +"موضوع را می‌توان به بهترین شکل در قابلیت‌های پیشرفته و قدرتمند بسته‌های بزرگ‌تر آن " +"مشاهده کرد. برای مثال:" #: ../../tutorial/stdlib.rst:333 msgid "" "The :mod:`xmlrpc.client` and :mod:`xmlrpc.server` modules make implementing " -"remote procedure calls into an almost trivial task. Despite the modules' " -"names, no direct knowledge or handling of XML is needed." +"remote procedure calls into an almost trivial task. Despite the modules' names, " +"no direct knowledge or handling of XML is needed." msgstr "" +"ماژول‌های :mod:`xmlrpc.client` و :mod:`xmlrpc.server` پیاده‌سازی فراخوانی رویه‌های " +"راه‌دور (Remote Procedure Calls یا RPC) را به کاری تقریباً ساده و بدیهی تبدیل " +"می‌کنند. با وجود نام این ماژول‌ها، نیازی به دانش یا کار مستقیم با XML نیست." #: ../../tutorial/stdlib.rst:337 msgid "" "The :mod:`email` package is a library for managing email messages, including " "MIME and other :rfc:`5322`-based message documents. Unlike :mod:`smtplib` " -"and :mod:`poplib` which actually send and receive messages, the email " -"package has a complete toolset for building or decoding complex message " -"structures (including attachments) and for implementing internet encoding " -"and header protocols." -msgstr "" +"and :mod:`poplib` which actually send and receive messages, the email package " +"has a complete toolset for building or decoding complex message structures " +"(including attachments) and for implementing internet encoding and header " +"protocols." +msgstr "" +"بستهٔ :mod:`email` کتابخانه‌ای برای مدیریت پیام‌های ایمیل است که از MIME و سایر " +"قالب‌های پیام مبتنی بر :rfc:`5322` نیز پشتیبانی می‌کند. برخلاف " +"ماژول‌های :mod:`smtplib` و :mod:`poplib` که وظیفهٔ ارسال و دریافت پیام‌ها را بر " +"عهده دارند، بستهٔ `email` مجموعه‌ای کامل از ابزارها را برای ساخت یا رمزگشایی " +"ساختارهای پیچیدهٔ پیام (از جمله پیوست‌ها) و همچنین پیاده‌سازی پروتکل‌های کدگذاری " +"اینترنتی و سرآیندهای پیام فراهم می‌کند." #: ../../tutorial/stdlib.rst:344 msgid "" -"The :mod:`json` package provides robust support for parsing this popular " -"data interchange format. The :mod:`csv` module supports direct reading and " -"writing of files in Comma-Separated Value format, commonly supported by " -"databases and spreadsheets. XML processing is supported by " -"the :mod:`xml.etree.ElementTree`, :mod:`xml.dom` and :mod:`xml.sax` " -"packages. Together, these modules and packages greatly simplify data " -"interchange between Python applications and other tools." -msgstr "" +"The :mod:`json` package provides robust support for parsing this popular data " +"interchange format. The :mod:`csv` module supports direct reading and writing " +"of files in Comma-Separated Value format, commonly supported by databases and " +"spreadsheets. XML processing is supported by " +"the :mod:`xml.etree.ElementTree`, :mod:`xml.dom` and :mod:`xml.sax` packages. " +"Together, these modules and packages greatly simplify data interchange between " +"Python applications and other tools." +msgstr "" +"بستهٔ :mod:`json` از تجزیه و پردازش این قالب پرکاربرد تبادل داده به‌خوبی پشتیبانی " +"می‌کند. ماژول :mod:`csv` امکان خواندن و نوشتن مستقیم فایل‌ها در قالب مقادیر جداشده " +"با ویرگول (CSV) را فراهم می‌کند؛ قالبی که معمولاً توسط پایگاه‌های داده و " +"نرم‌افزارهای صفحه‌گسترده پشتیبانی می‌شود. پردازش XML نیز توسط " +"بسته‌های :mod:`xml.etree.ElementTree`، :mod:`xml.dom` و :mod:`xml.sax` پشتیبانی " +"می‌شود. در کنار هم، این ماژول‌ها و بسته‌ها تبادل داده میان برنامه‌های پایتون و سایر " +"ابزارها را تا حد زیادی ساده می‌کنند." #: ../../tutorial/stdlib.rst:353 msgid "" "The :mod:`sqlite3` module is a wrapper for the SQLite database library, " -"providing a persistent database that can be updated and accessed using " -"slightly nonstandard SQL syntax." +"providing a persistent database that can be updated and accessed using slightly " +"nonstandard SQL syntax." msgstr "" +"ماژول :mod:`sqlite3` پوششی (wrapper) برای کتابخانهٔ پایگاه دادهٔ SQLite است و یک " +"پایگاه دادهٔ پایدار فراهم می‌کند که با استفاده از نگارش اندکی غیراستاندارد SQL " +"قابل به‌روزرسانی و دسترسی است." #: ../../tutorial/stdlib.rst:357 msgid "" "Internationalization is supported by a number of modules " "including :mod:`gettext`, :mod:`locale`, and the :mod:`codecs` package." msgstr "" +"پشتیبانی از بین‌المللی‌سازی (Internationalization) توسط چندین ماژول، از " +"جمله :mod:`gettext`، :mod:`locale` و بستهٔ :mod:`codecs` فراهم می‌شود." #: ../../tutorial/stdlib.rst:27 msgid "built-in function" -msgstr "" +msgstr "تابع داخلی" #: ../../tutorial/stdlib.rst:27 msgid "help" -msgstr "" +msgstr "راهنما"