{"id":223,"date":"2020-03-13T18:54:04","date_gmt":"2020-03-13T09:54:04","guid":{"rendered":"http:\/\/batmask.dothome.co.kr\/?p=223"},"modified":"2025-09-09T09:12:45","modified_gmt":"2025-09-09T00:12:45","slug":"python-context-manager","status":"publish","type":"post","link":"http:\/\/batmask.net\/index.php\/2020\/03\/13\/223\/","title":{"rendered":"Python Context Manager"},"content":{"rendered":"\n<p>\ud30c\uc77c \uc785\ucd9c\ub825\ub54c \uc2a4\ub9c8\ud2b8 \ud3ec\uc778\ud130\uac19\uc774 \uc791\ub3d9\ud558\uaca0\uac70\ub2c8 \ucd94\uce21\ud558\uba70 Context Manager\uc778 with-as \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud574 \uc654\ub2e4. \uadf8\ub7f0\ub370 \uc774\uac8c \ub124\ud2b8\uc6cc\ud06c \ucee4\ub125\uc158\uc5d0\ub3c4 \uc0ac\uc6a9\ub418\ub294\uac78 \ubcf4\uace0 \uc815\ud655\ud55c \ub3d9\uc791\uc744 \uc54c\uace0 \uc2f6\uc5b4\uc11c \uadf8 \ubc30\ud6c4\uc758 \ub3d9\uc791\uc744 real python\uc744 \ud1b5\ud574 \uacf5\ubd80\ud588\ub2e4. \ub3d9\uc791 \uc790\uccb4\ub294 \uc608\uc0c1\ud55c \uac83\uacfc \ud06c\uac8c \ub2e4\ub974\uc9c0 \uc54a\uc9c0\ub9cc, \uc815\ud655\ud788 \uc5b4\ub5a4\uac74\uc9c0 \uc801\uc5b4\ubcf8\ub2e4. <\/p>\n\n\n\n<p>\uc77c\ub2e8 \uc0ac\uc6a9\ubc29\ubc95\uc740 \ud30c\uc77c \uc785\ucd9c\ub825\uc758 \uc608\ub97c \ub4e4\uba74 Context Manager\ub97c \uc548\uc4f8 \ub54c \ub2e4\uc74c\uacfc \uac19\uc774 \uc775\uc219\ud55c \ucf54\ub4dc\ud615\ud0dc\uc9c0\ub9cc,<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>f = open(\"hello.txt\", \"w\")\ntry:\n    f.write(\"hello, world\")\nfinally:\n    f.close()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">f <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">open<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;hello.txt&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;w&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">try<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    f.write(<\/span><span style=\"color: #96D0FF\">&quot;hello, world&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">finally<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    f.close()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Context Manger\ub97c \uc0ac\uc6a9\ud558\uba74 &#8216;with&#8217; \ud0a4\uc6cc\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc774 \uac04\ud3b8\ud558\uac8c \uc4f8 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>with open(\"hello.txt\", \"w\") as f:\n    f.write(\"Hello world!\")<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">with<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">open<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #96D0FF\">&quot;hello.txt&quot;<\/span><span style=\"color: #ADBAC7\">, <\/span><span style=\"color: #96D0FF\">&quot;w&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">as<\/span><span style=\"color: #ADBAC7\"> f:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    f.write(<\/span><span style=\"color: #96D0FF\">&quot;Hello world!&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>with \ube14\ub7ed\uc744 \ube60\uc838\ub098\uac08 \ub54c, <code>file.close()<\/code>\ub97c \uc54c\uc544\uc11c \ud574\uc918\uc11c \uc2e4\uc218\ub85c \ud30c\uc77c\uc744 \ub2eb\uc9c0 \uc54a\ub294 \uc77c\uc774 \uc5c6\ub3c4\ub85d \ud574\uc900\ub2e4. \uc774\uac83\uc740 \ub3d9\uae30\ud654 \uc624\ube0c\uc81d\ud2b8\uc778 lock\uc744 \uc0ac\uc6a9\ud560 \ub54c\ub098, \ub124\ud2b8\uc6cc\ud06c \ucee4\ub125\uc158\uc5d0\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ub3d9\uc791\ud55c\ub2e4.  &#8216;as&#8217; \ud0a4\uc6cc\ub4dc\ub294 python\uc5d0\uc11c alias\ub97c \uc758\ubbf8\ud558\uba70, \ub2e4\ub978 \uacf3\uc5d0\uc11c\ub3c4 \uc0ac\uc6a9\ud55c\ub2e4. \uc608\ub97c \ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import Calendar as c\n...\nc.month\n...<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">import<\/span><span style=\"color: #ADBAC7\"> Calendar <\/span><span style=\"color: #F47067\">as<\/span><span style=\"color: #ADBAC7\"> c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">c.month<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">...<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ub3d9\uc791 \uc6d0\ub9ac\ub97c \uc54c\uba74, \uadf8 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc774\uc6a9\ud574\uc11c Context Manager\ub85c \ub3d9\uc791\ud558\ub294 \ucee4\uc2a4\ud140 \uac1d\uccb4\ub97c \ub9cc\ub4e4 \uc218 \uc788\ub2e4. \ud074\ub798\uc2a4\uc758 \uc608\ub97c\ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class ManagedFile:\n    def __init__(self, name):\n        self.name = name\n\n    def __enter__(self):\n        self.file = open(self.name, \"w\")\n        return self.file\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        if self.file:\n            self.file.close()\n\nwith ManagedFile(\"Hello.txt\") as f:\n    f.write(\"Hello world!\")<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">ManagedFile<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__init__<\/span><span style=\"color: #ADBAC7\">(self, name):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.name <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> name<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__enter__<\/span><span style=\"color: #ADBAC7\">(self):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.file <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">open<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.name, <\/span><span style=\"color: #96D0FF\">&quot;w&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.file<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__exit__<\/span><span style=\"color: #ADBAC7\">(self, exc_type, exc_val, exc_tb):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.file:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.file.close()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">with<\/span><span style=\"color: #ADBAC7\"> ManagedFile(<\/span><span style=\"color: #96D0FF\">&quot;Hello.txt&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">as<\/span><span style=\"color: #ADBAC7\"> f:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    f.write(<\/span><span style=\"color: #96D0FF\">&quot;Hello world!&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>with \uad6c\ubb38\uc5d0\uc11c __enter__ \uba64\ubc84\ud568\uc218\uac00 \ubd88\ub9ac\uace0, \ube14\ub7ed\uc744 \ub098\uac08 \ub54c, __exit__ \uba64\ubc84\ud568\uc218\uac00 \ubd88\ub9ac\ub294 \uac83. \uc758\uc678\ub85c \uac04\ub2e8\ud558\ub2e4. \ud568\uc218\uc5d0 \ub300\ud574\uc11c\ub3c4 \uc4f8 \uc218 \uc788\ub294\ub370, contextmanager \ub370\ucf54\ub808\uc774\ud130\uac00 \uc0ac\uc6a9\ub41c\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>from contextlib import contextmanager\n\n@contextmanager\ndef managed_file(name):\n    file = None\n    try:\n        file = open(name, \"w\")\n        yield file\n    finally:\n        if file is not None:\n            file.close()\n....\nwith managed_file(\"Hello.txt\") as f:\n    f.write(\"Hello world!\")<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">from<\/span><span style=\"color: #ADBAC7\"> contextlib <\/span><span style=\"color: #F47067\">import<\/span><span style=\"color: #ADBAC7\"> contextmanager<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #DCBDFB\">@contextmanager<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">managed_file<\/span><span style=\"color: #ADBAC7\">(name):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F69D50\">file<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">None<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">try<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F69D50\">file<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">open<\/span><span style=\"color: #ADBAC7\">(name, <\/span><span style=\"color: #96D0FF\">&quot;w&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">yield<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">finally<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">file<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">is<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">not<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">None<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">            <\/span><span style=\"color: #F69D50\">file<\/span><span style=\"color: #ADBAC7\">.close()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">...<\/span><span style=\"color: #ADBAC7\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">with<\/span><span style=\"color: #ADBAC7\"> managed_file(<\/span><span style=\"color: #96D0FF\">&quot;Hello.txt&quot;<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #F47067\">as<\/span><span style=\"color: #ADBAC7\"> f:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    f.write(<\/span><span style=\"color: #96D0FF\">&quot;Hello world!&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uc911\uac04\uc5d0 \uc788\ub294 yield \ubd80\ubd84\uc744 \ub208\uc5ec\uaca8 \ubd10\uc57c\ud558\ub294\ub370, C#\uc758 coroutine\uacfc \uac19\ub2e4\uba74, with\ubb38\uc5d0\uc11c \uc5ec\uae30\uae4c\uc9c0 \uc2e4\ud589\ub418\uace0 file \ud578\ub4e4\ub7ec\ub97c \ub3cc\ub824\uc900\ub2e4. \uadf8\ub9ac\uace0 with \ube14\ub7ed\uc774 \ub05d\ub0a0 \ub54c, \uc5ec\uae30\uc11c\ubd80\ud130 \ub2e4\uc2dc \uc2e4\ud589\ub418\ub294 \uac83. <\/p>\n\n\n\n<p>\uadf8\ub0e5 \uadf8\ub7ec\ub824\ub2c8 \ud588\ub294\ub370, \uc54c\uace0\ub098\uba74 \uc2e4\uc81c \uad6c\ud604\ub3c4 \uac04\ub2e8\ud558\uace0 yield \ubb38 \uc0ac\uc6a9\uc774 \ubb54\uac00 \uc2a4\ub9c8\ud2b8\ud55c \ub290\ub08c\uc774 \ub4dc\ub124.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud30c\uc77c \uc785\ucd9c\ub825\ub54c \uc2a4\ub9c8\ud2b8 \ud3ec\uc778\ud130\uac19\uc774 \uc791\ub3d9\ud558\uaca0\uac70\ub2c8 \ucd94\uce21\ud558\uba70 Context Manager\uc778 with-as \uad6c\ubb38\uc744 \uc0ac\uc6a9\ud574 \uc654\ub2e4. \uadf8\ub7f0\ub370 \uc774\uac8c \ub124\ud2b8\uc6cc\ud06c \ucee4\ub125\uc158\uc5d0\ub3c4 \uc0ac\uc6a9\ub418\ub294\uac78 \ubcf4\uace0 \uc815\ud655\ud55c \ub3d9\uc791\uc744 \uc54c\uace0 \uc2f6\uc5b4\uc11c \uadf8 \ubc30\ud6c4\uc758 \ub3d9\uc791\uc744 real python\uc744 \ud1b5\ud574 \uacf5\ubd80\ud588\ub2e4. \ub3d9\uc791 \uc790\uccb4\ub294 \uc608\uc0c1\ud55c \uac83\uacfc \ud06c\uac8c \ub2e4\ub974\uc9c0 \uc54a\uc9c0\ub9cc, \uc815\ud655\ud788 \uc5b4\ub5a4\uac74\uc9c0 \uc801\uc5b4\ubcf8\ub2e4. \uc77c\ub2e8 \uc0ac\uc6a9\ubc29\ubc95\uc740 \ud30c\uc77c \uc785\ucd9c\ub825\uc758 \uc608\ub97c \ub4e4\uba74 Context Manager\ub97c \uc548\uc4f8 \ub54c \ub2e4\uc74c\uacfc \uac19\uc774 \uc775\uc219\ud55c \ucf54\ub4dc\ud615\ud0dc\uc9c0\ub9cc, Context Manger\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33],"tags":[72,70,35,71,146,55],"class_list":["post-223","post","type-post","status-publish","format-standard","hentry","category-python","tag-as","tag-context-manager","tag-python","tag-with","tag-context-manager-kr","tag-python-kr"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=223"}],"version-history":[{"count":3,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/223\/revisions"}],"predecessor-version":[{"id":3415,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/223\/revisions\/3415"}],"wp:attachment":[{"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=223"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}