{"id":7726,"date":"2019-10-13T14:34:34","date_gmt":"2019-10-13T21:34:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7726"},"modified":"2025-06-13T21:25:16","modified_gmt":"2025-06-14T04:25:16","slug":"tips-and-tricks-for-upgrading-from-python-2-to-python-3","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/","title":{"rendered":"\ud30c\uc774\uc36c 2\ub97c \ud30c\uc774\uc36c 3\ub85c \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \ubc29\ubc95\uacfc \uadf8 \ucc28\uc774\uc810"},"content":{"rendered":"<h2><span style=\"font-weight: 400\">\uc18c\uac1c<\/span><\/h2>\n<p><span style=\"font-weight: 400\">\ud30c\uc774\uc36c 3 \ubc84\uc804\uc73c\ub85c\uc758 \ub9c8\uc9c0\ub9c9 \uc8fc\uc694 \uc5c5\uadf8\ub808\uc774\ub4dc\ub294 \uac70\uc758 12\ub144 \uc804\uc778 2008\ub144 12\uc6d4\uc5d0 \uc774\ub8e8\uc5b4\uc84c\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uc544\uc9c1 Python 2 \uc81c\ud488\uc774\ub098 \ud14c\uc2a4\ud2b8 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uace0 \uacc4\uc2e4 \uac00\ub2a5\uc131\uc774 \ub192\uc2b5\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 \uc0ac\uc6a9 \uc911\uc778 Python \ubc84\uc804\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\ub77c\ub294 \uc54c\ub9bc\uc73c\ub85c \uc544\ub798 \uc0ac\uc6a9 \uc911\ub2e8 \uba54\uc2dc\uc9c0\uac00 \ud45c\uc2dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\"\uc54c\ub9bc: Python 2.7\uc740 2020\ub144 1\uc6d4 1\uc77c\uc5d0 \uc218\uba85\uc774 \uc885\ub8cc\ub429\ub2c8\ub2e4. \uc774 \ub0a0\uc9dc \uc774\ud6c4\uc5d0\ub294 \ud30c\uc774\uc36c 2.7\uc774 \uc720\uc9c0 \uad00\ub9ac\ub418\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ud30c\uc774\uc36c\uc744 \uc5c5\uadf8\ub808\uc774\ub4dc\ud558\uc138\uc694. \ud5a5\ud6c4 \ubc84\uc804\uc758 pip\uc5d0\uc11c\ub294 Python 2.7\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc774 \uc911\ub2e8\ub429\ub2c8\ub2e4.\"<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc774\ub97c \uc2ec\uac01\ud558\uac8c \ubc1b\uc544\ub4e4\uc774\uace0 \uadf8\uc5d0 \ub530\ub77c \uacc4\ud68d\uc744 \uc138\uc6b0\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4: Python 3.x \uc5c5\ub370\uc774\ud2b8\ub294 \uc774\uc804 \ubc84\uc804\uacfc \ud638\ud658\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Python 2.x \ubc84\uc804\uc73c\ub85c \uc791\uc131\ud55c \ub0b4\uc6a9\uc774 3.x\ub97c \uc0ac\uc6a9\ud560 \ub54c \uc81c\ub300\ub85c \uc791\ub3d9\ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><span style=\"font-weight: 400\">.<\/span><\/p>\n<p class=\"\"><span style=\"font-weight: 400\">\uc791\uc740 \uae00\uc528\ub3c4 \uaf2d \uc77d\uc5b4\ubcf4\uc138\uc694. \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4 \uc6f9\uc0ac\uc774\ud2b8\uc5d0 \ub530\ub974\uba74 \ud30c\uc774\uc36c\uc758 \ucd5c\uc885 \uc5c5\uadf8\ub808\uc774\ub4dc \ub9b4\ub9ac\uc2a4 \ub0a0\uc9dc\ub294 \uc544\uc9c1 \ubbf8\uc815\uc785\ub2c8\ub2e4. \"2.x \uc2dc\ub9ac\uc988\uc758 \ub9c8\uc9c0\ub9c9 \ubc84\uc804\uc778 2.7\uc740 2020\ub144\uae4c\uc9c0 \ubc84\uadf8 \uc218\uc815 \uc9c0\uc6d0\uc744 \ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uacf5\uc2dd\uc801\uc73c\ub85c 2020\ub144 1\uc6d4 1\uc77c\uc5d0 \uc9c0\uc6d0\uc774 \uc911\ub2e8\ub418\uc9c0\ub9cc \ucd5c\uc885 \ub9b4\ub9ac\uc988\ub294 \uadf8 \uc774\ud6c4\uc5d0 \uc774\ub8e8\uc5b4\uc9c8 \uc608\uc815\uc785\ub2c8\ub2e4.\" [<a href=\"https:\/\/www.python.org\/dev\/peps\/pep-0373\/#update\">1<\/a>]<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub530\ub77c\uc11c Python 2\ub294 \uc62c\ud574 \ub9d0\uae4c\uc9c0 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\ub294 \ubaa8\ub4dc\ub85c \uc804\ud658\ub429\ub2c8\ub2e4. \uc544\uc9c1 \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\uc9c0 \uc54a\uc73c\uc168\ub2e4\uba74 \uc9c0\uae08\uc774 \ud604\uc7ac Python 2 \ucf54\ub4dc\ub97c Python 3 \uad6c\ubb38\uc73c\ub85c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\uace0 \uc55e\uc73c\ub85c\ub294 Python 3\uc744 \uace0\uc218\ud558\uae30\uc5d0 \uc88b\uc740 \uc2dc\uae30\uc785\ub2c8\ub2e4. <\/span><\/p>\n<p><span style=\"font-weight: 400\">\ud300\uc5d0\uc11c \ubc14\ub85c Python 2\uc5d0\uc11c 3\uc73c\ub85c\uc758 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc2dc\uc791\ud558\uc9c0 \uc54a\ub294 \uc774\uc720\ub294 \ubb34\uc5c7\uc77c\uae4c\uc694? \uac00\uc7a5 \ud070 \uc7a5\uc560\ubb3c \uc911 \ud558\ub098\ub294 \ub300\ubd80\ubd84\uc758 \uc791\uc5c5 \ucf54\ub4dc\uac00 \ub2e8\uc21c\ud788 \uae68\uc9c4\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4( <\/span><a href=\"https:\/\/python-notes.curiousefficiency.org\/en\/latest\/python3\/questions_and_answers.html#why-was-python-3-made-incompatible-with-python-2\"><span style=\"font-weight: 400\">\uc65c \ud30c\uc774\uc36c 3\uc774 \ud30c\uc774\uc36c 2\uc640 \ud638\ud658\ub418\uc9c0 \uc54a\ub294\uac00?<\/span><\/a><span style=\"font-weight: 400\">), \uc9c1\uc811 \uc5b8\uc5b4 \uad6c\ubb38\uc774\ub098 \ud0c0\uc0ac API\uc758 \ubb38\uc81c\ub85c \uc778\ud574 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \ud544\uc694\ud55c \uacbd\uc6b0\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uacf5\uc815\ud558\uac8c \ub9d0\ud558\uc790\uba74, \uc0c8\ub85c\uc6b4 Python \uc5c5\ub370\uc774\ud2b8\uac00 \uc774\uc804 \ubc84\uc804\uacfc \ud638\ud658\ub41c\ub2e4\uba74 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc5d0 \uc2e0\uacbd \uc4f8 \uc0ac\ub78c\uc740 \uac70\uc758 \uc5c6\uc744 \uac83\uc785\ub2c8\ub2e4. \ub300\uc2e0 \ubc84\uc804 2\uac00 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 Couchbase\ub97c \ud3ec\ud568\ud55c \ub9ce\uc740 \uc0ac\ub78c\ub4e4\uc774 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc6b0\uc120\uc2dc\ud558\uac8c \ub420 \uac83\uc785\ub2c8\ub2e4. \ud300\uc774 \ubc84\uadf8 \uc218\uc815 \uc9c0\uc6d0 \uae30\ud55c\uc744 \ub118\uae30\ub354\ub77c\ub3c4 \ucf54\ub4dc\ub294 \uacc4\uc18d \uc791\ub3d9\ud558\ubbc0\ub85c \uad1c\ucc2e\uc2b5\ub2c8\ub2e4. \ud300\uc73c\ub85c\uc11c \uc6b0\ub9ac\ub294 \uac00\ub2a5\ud55c \ud55c \uc774 \ub0a0\uc9dc\uc5d0 \uac00\uae5d\uac8c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud558\uc5ec \ub2e4\ub978 Python \ucee4\ubba4\ub2c8\ud2f0 \uad6c\uc131\uc6d0\ub4e4\uacfc \uac19\uc740 \uc815\ubcf4\ub97c \uacf5\uc720\ud558\uace0 \ud568\uaed8 \ubc30\uc6b0\ub294 \uac83\uc774 \ub354 \ub0ab\ub2e4\uace0 \uacb0\uc815\ud588\uc2b5\ub2c8\ub2e4.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc774 \ubb38\uc11c\ub294 Python 3\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud558\ub294 \ub3d9\uc548 \ubc30\uc6b4 \ud301\uacfc \uc694\ub839, \uadf8\ub9ac\uace0 Couchbase \ud14c\uc2a4\ud2b8 \uc778\ud504\ub77c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacfc\uc815\uc5d0\uc11c \uacaa\uc740 \uc77c\ubc18\uc801\uc778 \ubb38\uc81c\ub97c \uc815\ub9ac\ud55c \uac83\uc785\ub2c8\ub2e4. \ubcf4\uc2dc\ub2e4\uc2dc\ud53c \uc800\ud76c\ub294 \uc790\ub3d9\ud654\ub41c \ud504\ub85c\uc138\uc2a4\ub85c \ud0a5\uc2a4\ud0c0\ud2b8\ud55c \ud6c4 \uba85\ub839\uc904\uc744 \ud1b5\ud574 \uc218\ub3d9\uc73c\ub85c Python\uc744 \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc5ec\ub7ec\ubd84\uc758 \uc811\uadfc \ubc29\uc2dd\uc740 \ub2e4\ub97c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uca0c\ub4e0 \uac00\ub2a5\ud55c \ud55c \ube68\ub9ac \uc2dc\uc791\ud558\uc138\uc694. \ud30c\uc774\uc36c\uc744 \ubc84\uc804 2\uc5d0\uc11c \ubc84\uc804 3\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/ko\/downloads\/\"><span style=\"font-weight: 400\">\uce74\uc6b0\uce58\ubca0\uc774\uc2a4<\/span><\/a><span style=\"font-weight: 400\"> \ub294 \uc624\ud508 \uc18c\uc2a4 \uc5d4\ud130\ud504\ub77c\uc774\uc988\uae09 \uba40\ud2f0\ud074\ub77c\uc6b0\ub4dc-\uc5d0\uc9c0 NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc785\ub2c8\ub2e4. Couchbase \uae30\ub2a5 \ud14c\uc2a4\ud2b8 \ud504\ub808\uc784\uc6cc\ud06c\uc778 TestRunner\ub294 Python 2\ub85c \uac1c\ubc1c\ub418\uc5c8\uc2b5\ub2c8\ub2e4. TestRunner git \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\ub294 \ub2e4\uc74c\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><a href=\"https:\/\/github.com\/couchbase\/testrunner\"> <span style=\"font-weight: 400\">https:\/\/github.com\/couchbase\/testrunner<\/span><\/a><span style=\"font-weight: 400\"> .  \uc774\uc81c \uc6b0\ub9ac\uc758 \ubaa9\ud45c\ub294 \ud30c\uc774\uc36c 3\uacfc \ud30c\uc774\uc36c 2\ub97c \ud568\uaed8 \uc2e4\ud589\ud558\ub294 \ub300\uc2e0 \ud30c\uc774\uc36c 3 \ub7f0\ud0c0\uc784\uc73c\ub85c \uc644\uc804\ud788 \uc804\ud658\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Python \uc5c5\uadf8\ub808\uc774\ub4dc \ud504\ub85c\uc138\uc2a4\uc758 \uc77c\ud658\uc73c\ub85c \ubc84\uc804 3\uc73c\ub85c \uc131\uacf5\uc801\uc73c\ub85c \ud3ec\ud305\ud558\ub294 \ub370 \ud544\uc694\ud55c \uc8fc\uc694 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ud655\uc778\ud588\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 \ud3ec\ud305 \uacfc\uc815\uc5d0\uc11c \ud655\uc778\ub41c \uba87 \uac00\uc9c0 \ubb38\uc81c\uc5d0 \ub300\ud574 \uc124\uba85\ud569\ub2c8\ub2e4. \uc800\ud76c\uc758 \ud559\uc2b5 \ub0b4\uc6a9\uc744 \uacf5\uc720\ud558\ub294 \ubaa9\uc801\uc740 \uc5ec\ub7ec\ubd84\uc758 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc5d0 \ub3c4\uc6c0\uc774 \ub418\uace0\uc790 \ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ucd5c\uc2e0 Python 3.x \ubc84\uc804(\ud2b9\uc815 \ud50c\ub7ab\ud3fc\uc758 \uc548\uc815\uc801\uc774\uace0 \ubcf4\uc548\uc774 \uc218\uc815\ub41c \uc0ac\uc804 \ub9b4\ub9ac\uc2a4 \ubc84\uc804\uc778 3.7 \ub610\ub294 3.6\uc5d0 \ub530\ub77c \ub2e4\ub984)\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\uc73c\uba70, \uc774 \ube14\ub85c\uadf8 \uc804\uccb4\uc5d0\uc11c Python 3\uc774\ub77c\uace0 \ubd80\ub985\ub2c8\ub2e4. \ub9b4\ub9ac\uc2a4\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ub2e4\uc74c\uc5d0\uc11c \ud655\uc778\ud558\uc138\uc694. <\/span><a href=\"https:\/\/www.python.org\/downloads\/\"><span style=\"font-weight: 400\">Python \ub9b4\ub9ac\uc2a4 \ub2e4\uc6b4\ub85c\ub4dc<\/span><\/a><span style=\"font-weight: 400\"> \uadf8\ub9ac\uace0\u00a0 <\/span><span style=\"font-weight: 400\"><a href=\"https:\/\/docs.python.org\/3\">Python 3 \ubb38\uc11c<\/a>.<\/span><\/p>\n<p>\uce58\ud2b8 \uc2dc\ud2b8<\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">\uc8fc\uc694 \ubcc0\uacbd \uc0ac\ud56d: \ud30c\uc774\uc36c 2\uc640 \ud30c\uc774\uc36c 3<\/span><\/h2>\n<p>\ud30c\uc774\uc36c 2\uc640 \ud30c\uc774\uc36c 3\uc758 \uc8fc\uc694 \ucc28\uc774\uc810\uc744 \ud30c\uc545\ud558\uae30 \uc704\ud574 \ud544\uc694\ud55c \ucf54\ub4dc \ubcc0\uacbd \uc0ac\ud56d\uc758 \uc694\uc57d \ubaa9\ub85d\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<div class=\"responsive-table\">\n<table border=\"1\">\n<tbody>\n<tr>\n<td><b>Python 2<\/b><\/td>\n<td><b>Python 3<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\ud14d\uc2a4\ud2b8 utf-8 : str<\/span><br \/>\n<span style=\"font-weight: 400\">&#8216;<\/span><span style=\"font-weight: 400\">&#8216;<\/span><\/td>\n<td><span style=\"font-weight: 400\">\ud14d\uc2a4\ud2b8\ub294 \uc720\ub2c8\ucf54\ub4dc : str<\/span><br \/>\n<span style=\"font-weight: 400\">u\"<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\ubc14\uc774\ub108\ub9ac\ub294 \ud14d\uc2a4\ud2b8\uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4: \ubc14\uc774\ud2b8\/\uc2a4\ud2b8\ub9c1<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608\uc2dc:<\/span><br \/>\n<span style=\"font-weight: 400\">file.read(6) == 'GIF89a'<\/span><\/td>\n<td><span style=\"font-weight: 400\">\ubc14\uc774\ub108\ub9ac \ub370\uc774\ud130\ub294 b \uc811\ub450\uc0ac: \ubc14\uc774\ud2b8\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4.<\/span><br \/>\n<span style=\"font-weight: 400\">\u00a0b\"<\/span><br \/>\n<span style=\"font-weight: 400\">\ubb38\uc790\uc5f4\uc744 \uac00\uc838\uc624\ub824\uba74 decode(), \ubc14\uc774\ud2b8\ub97c \uac00\uc838\uc624\ub824\uba74 encode()\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/span><span style=\"font-weight: 400\">\uc608\uc2dc:\u00a0<\/span><br \/>\n<span style=\"font-weight: 400\">file.read(6) == b'GIF89a'<\/span><br \/>\n<span style=\"font-weight: 400\">b'hello'.decode() \u2192 'hello'<\/span><br \/>\n<span style=\"font-weight: 400\">'hello'.encode() \u2192 b'hello'<\/span><br \/>\n<span style=\"font-weight: 400\"><span style=\"font-weight: 400\">str(b'hello') \u2192 \"b'hello'<\/span><\/span>&#8220;<\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\uba85\uc138\uc11c \uc778\uc1c4<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608: \uc778\uc1c4 ' '<\/span><\/td>\n<td><span style=\"font-weight: 400\">\uc778\uc1c4 \uae30\ub2a5<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608:\uc778\uc1c4(' ')<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\uc815\uc218 \ub098\ub204\uae30<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608\uc2dc: 5\/2=2<\/span><\/td>\n<td><span style=\"font-weight: 400\">\ubc14\ub2e5 \ubd84\ud560. \uc2ac\ub798\uc2dc 2\uac1c \uc0ac\uc6a9<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608\uc2dc: \uc608: 5\/\/2 = 2 \ubc0f 5\/2 = 2.5<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\ubd80\ub3d9 \uc18c\uc218\uc810 \ub098\ub204\uae30<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608\uc2dc: 5\/2.0 = 2.5 \ub610\ub294 5.0\/2 = 2.5<\/span><\/td>\n<td><span style=\"font-weight: 400\">\ud50c\ub85c\ud2b8 \ubd84\ud560. \ub2e8\uc77c \uc2ac\ub798\uc2dc \uc0ac\uc6a9<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608\uc2dc: 5\/2 = 2.5<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\uae34 \uc720\ud615\uc740 int\uc640 \ub2e4\ub985\ub2c8\ub2e4.<\/span><br \/>\n<span style=\"font-weight: 400\">long\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400\">\uae34 \uc720\ud615\uc740 \uc5c6\uc2b5\ub2c8\ub2e4. int\uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">xrange()<\/span><\/td>\n<td><span style=\"font-weight: 400\">\ubc94\uc704()<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\ubc18\ubcf5 \ud568\uc218\uc5d0\ub294 iter \uc811\ub450\uc0ac\uac00 \uc788\uc2b5\ub2c8\ub2e4. iterxxx()<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608: iteritems()<\/span><\/td>\n<td><span style=\"font-weight: 400\">\uc0ad\uc81c\ub41c \uc774\ud130 \uc811\ub450\uc0ac. xxxx()<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608: items()<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\ubaa9\ub85d\uc774 \uc9c1\uc811 \ub85c\ub4dc\ub429\ub2c8\ub2e4(\ubaa9\ub85d \uc0ac\uc6a9 \uc2dc \ubaa8\ub4e0 \uc694\uc18c\uac00 \uba54\ubaa8\ub9ac\uc5d0 \ub85c\ub4dc\ub428).<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608: []\uc5d0\uc11c i\uc758 \uacbd\uc6b0\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400\">\ubaa9\ub85d\uc740 \uc9c0\uc5f0 \ub85c\ub4dc\ub429\ub2c8\ub2e4(\uc694\uc18c\uc5d0 \uc561\uc138\uc2a4\ud560 \ub54c \uba54\ubaa8\ub9ac\uc5d0\ub9cc \ub85c\ub4dc\ub428).<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608: \ubaa9\ub85d([])\uc5d0\uc11c i\uc758 \uacbd\uc6b0\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\uc0ac\uc804\uc740 \uae30\ubcf8\uc801\uc73c\ub85c \ub610\ub294 2\uac1c\uc758 \uc0ac\uc804\uacfc \ube44\uad50\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><br \/>\n<span style=\"font-weight: 400\">\uc608: sorted(dict)\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400\">\uc815\ub82c()\uc5d0\ub294 \ud0a4\uac00 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc608\uc2dc: <\/span><span style=\"font-weight: 400\">sorted(expected_result,key=(lambda x: x[bucket.name]['name']))<\/span><span style=\"font-weight: 400\">\uc77c\ubc18\uc801\uc778 \ub515\uc154\ub108\ub9ac\/\ubaa9\ub85d \ube44\uad50\ub294 \uc544\ub798\ub97c \ucc38\uc870\ud558\uc138\uc694:\u00a0<\/span><br \/>\n<span style=\"font-weight: 400\">\u00a0\ub525\ub514\ud504\uc5d0\uc11c \ub525\ub514\ud504 \uac00\uc838\uc624\uae30<\/span><br \/>\n<span style=\"font-weight: 400\">\u00a0<\/span><span style=\"font-weight: 400\">diffs = DeepDiff(actual_result['results'], expected_result[<\/span><b>'results'<\/b><span style=\"font-weight: 400\">], <\/span><span style=\"font-weight: 400\">\ubb34\uc2dc_\uc21c\uc11c<\/span><span style=\"font-weight: 400\">=<\/span><b>True<\/b><span style=\"font-weight: 400\">)<\/span><b>\ub9cc\uc57d <\/b><span style=\"font-weight: 400\">\ucc28\uc774\uc810:<\/span><br \/>\n<span style=\"font-weight: 400\">\u00a0\u00a0\u00a0<\/span><span style=\"font-weight: 400\">self<\/span><span style=\"font-weight: 400\">.assertTrue(<\/span><b>False<\/b><span style=\"font-weight: 400\">, diffs)<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ubc14\uc774\ud2b8 \ubc0f \ubb38\uc790\uc5f4\uc744 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4:<\/span><br \/>\n<span style=\"font-weight: 400\">diffs = DeepDiff(<\/span><span style=\"font-weight: 400\">set<\/span><span style=\"font-weight: 400\">(\uc2e4\uc81c_\uc778\ub371\uc2a4), <\/span><span style=\"font-weight: 400\">set<\/span><span style=\"font-weight: 400\">(\uc778\ub371\uc2a4_\uc774\ub984), <\/span><span style=\"font-weight: 400\">\ubb34\uc2dc_\uc21c\uc11c<\/span><span style=\"font-weight: 400\">=<\/span><b>True<\/b><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">\ubb34\uc2dc_\uc2a4\ud2b8\ub9c1 \uc720\ud615 \ubcc0\uacbd \ubb34\uc2dc<\/span><span style=\"font-weight: 400\">=<\/span><b>True<\/b><span style=\"font-weight: 400\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">string.replace(data[i],...)<\/span><\/td>\n<td><span style=\"font-weight: 400\">data[i].replace(..)<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">urllib.urlencode()<\/span><\/td>\n<td><span style=\"font-weight: 400\">\uc0c8\ub85c\uc6b4 \ubaa8\ub4c8<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">http.client<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">urllib.\uc694\uccad, urllib.\uc624\ub958, urllib.\ud30c\uc2f1<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sgmllib3k<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">\uc608\uc2dc:\u00a0<\/span><br \/>\n<span style=\"font-weight: 400\">urllib.parse.urlencode()<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\ubb38\uc790\uc5f4.\uc18c\ubb38\uc790<\/span><\/td>\n<td><span style=\"font-weight: 400\">\uc18d\uc131:<\/span><br \/>\n<span style=\"font-weight: 400\">string.ascii_\uc18c\ubb38\uc790<\/span><br \/>\n<span style=\"font-weight: 400\">string.ascii_\ub300\ubb38\uc790<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><span style=\"font-weight: 400\">\ucc38\uc870 <\/span><a href=\"https:\/\/github.com\/couchbaselabs\/testrunner-py3\/commits\/master\"><span style=\"font-weight: 400\">testrunner py3 \ucee4\ubc0b<\/span><\/a><span style=\"font-weight: 400\">\u00a0 \ubcc0\uacbd \uc0ac\ud56d<\/span><\/p>\n<h2><\/h2>\n<h2><span style=\"font-weight: 400\">Python 3 \uc124\uc815<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Python 3\uc744 \ucc98\uc74c\ubd80\ud130 \uc124\uc815\ud558\ub824\uba74 \uc8fc\uc694 \uc9c0\uc6d0 \ud50c\ub7ab\ud3fc\uc774 \uc788\ub294 \uc0c8 \ud638\uc2a4\ud2b8\uc5d0\uc11c \uc544\ub798 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc138\uc694.<\/span><br \/>\n<span style=\"font-weight: 400\">\ub098\uc911\uc5d0 \ub7f0\ud0c0\uc784 \uc911\uc5d0 \ud30c\uc774\uc36c 3 \uba85\ub839\uc5b4 \ub610\ub294 \ud30c\uc774\uc36c 3 \uac00\uc0c1 \ud658\uacbd\uc758 \ud30c\uc774\uc36c\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc124\uce58\ub41c \ud30c\uc774\uc36c 3 \ubc84\uc804\uc744 \uae30\ubc18\uc73c\ub85c \ud328\ud0a4\uc9c0\ub97c \uc124\uce58\ud558\ub824\uba74 pip3 \ub610\ub294 pip3.x(\uc608: pip3.6)\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/span><\/p>\n<div class=\"responsive-table\">\n<table>\n<tbody>\n<tr>\n<td><b>Mac OS<\/b><br \/>\n(\uc608: \ub178\ud2b8\ubd81)<br \/>\n<span style=\"font-weight: 400\">\uc9c1\uc811 \uc124\uc815(pip3\uac00 \uc790\ub3d9\uc73c\ub85c \uc124\uce58\ub428):<\/span>(https:\/\/wsvincent.com\/install-python3-mac\/)<\/p>\n<pre class=\"lang:python decode:true\">brew install python3<\/pre>\n<p><span style=\"font-weight: 400\">\uac00\uc0c1 \ud658\uacbd \uc124\uc815:<\/span><\/p>\n<pre class=\"lang:sh decode:true\">$ pip3 install virtualenv\r\n$ mkdir ~\/environments\r\n$ virtualenv -p python3 ~\/environments\r\n$ source ~\/environments\/bin\/activate\r\n(environments) jmunta-mac:~ jagadeshmunta\r\n$ python -V\r\nPython 3.7.3\r\n(environments) jmunta-mac:~ jagadeshmunta\r\n<\/pre>\n<p>\ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:sh decode:true\">$ pip3 install couchbase\r\n$ pip3 install sgmllib3k\r\n$ pip3 install paramiko\r\n$ pip3 install httplib2\r\n$ pip3 install pyyaml\r\n$ pip3 install Geohash\r\n$ pip3 install python-geohash\r\n$ pip3 install deepdiff\r\n$ pip3 install pyes\r\n\r\n<\/pre>\n<p>\ud604\uc7ac\ub85c\uc11c\ub294 \uc77c\ubc18\uc801\uc778 Python 3 http \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc544\ub798 \uc218\uc815\uc774 \ud544\uc694\ud558\uba70, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:sh decode:true\">$ vi \/usr\/lib64\/python3.6\/http\/client.py\u00a0\u00a0 \r\nchunk to chunk.encode() in similar to the below:\r\n1078 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 chunk = f'{len(chunk):X}\\r\\n'.encode('ascii') + chunk.encode() \\<\/pre>\n<p>&nbsp;<\/td>\n<\/tr>\n<tr>\n<td><b>CentOS\u00a0\u00a0<\/b><br \/>\n(<span style=\"font-weight: 400\">\uc608\uc81c \ub178\ub4dc: \uc820\ud0a8\uc2a4 \uc2ac\ub808\uc774\ube0c)<\/span><br \/>\n\uc9c1\uc811 \uc124\uc815 \ubc0f \uac00\uc0c1 \ud658\uacbd:<\/p>\n<pre class=\"lang:sh decode:true\"># yum -y install https:\/\/centos7.iuscommunity.org\/ius-release.rpm\r\n# yum list available &gt; \/tmp\/available_pkgs.txt\r\n# cat \/tmp\/available_pkgs.txt\u00a0 |egrep python3\r\n# yum -y install python36u\r\n# python3.6 --version\r\n# yum -y install python36u-pip\r\n# yum -y install python36u-devel\r\n# python3.6 -V\r\n# mkdir ~\/environments\r\n# cd ~\/environments\/\r\n# python3.6 -m venv my_env\r\n# source ~\/environments\/my_env\/bin\/activate\r\n# python -V<\/pre>\n<p>\ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:sh decode:true\"># pip3.6 install requests\r\n# pip3.6 install sgmllib3k\r\n# pip3.6 install paramiko\r\n# pip3.6 install httplib2\r\n# pip3.6 install pyyaml\r\n# pip3.6 install pytz\r\n# pip3.6 install Geohash\r\n# pip3.6 install python-geohash\r\n# pip3.6 install deepdiff\r\n# pip3.6 install pyes<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">\uc0c8 \uc2ac\ub808\uc774\ube0c\uc5d0 Couchbase CSDK \ubc0f Python SDK \uc124\uce58\ub97c \uc218\ud589\ud569\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:sh decode:true\"># yum -y install wget git\r\n# wget https:\/\/packages.couchbase.com\/releases\/couchbase-release\/couchbase-release-1.0-6-x86_64.rpm\r\n# rpm -iv couchbase-release-1.0-6-x86_64.rpm\r\n# yum install libcouchbase-devel libcouchbase2-bin gcc gcc-c++\r\n# pip3.6 install couchbase<\/pre>\n<p>\ud604\uc7ac\ub85c\uc11c\ub294 \uc77c\ubc18\uc801\uc778 Python 3 http \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc544\ub798 \uc218\uc815\uc774 \ud544\uc694\ud558\uba70, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:sh decode:true\">$ vi \/usr\/lib64\/python3.6\/http\/client.py\u00a0\u00a0 \r\nchunk to chunk.encode() in similar to the below: \r\n1078 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 chunk = f'{len(chunk):X}\\r\\n'.encode('ascii') + chunk.encode() \\<\/pre>\n<p>&nbsp;<\/td>\n<\/tr>\n<tr>\n<td><b>Python 3 \ub7f0\ud0c0\uc784 \uac80\uc99d\uc5d0 \uc0ac\uc6a9\ud558\ub294 Ubuntu \uc2ac\ub808\uc774\ube0c<\/b><br \/>\n\uc9c1\uc811 \uc124\uc815:<\/p>\n<pre class=\"lang:sh decode:true\"># apt \uc124\uce58 python3-pip<\/pre>\n<p>&nbsp;<\/p>\n<p>\ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:sh decode:true\"># pip3 install sgmllib3k\r\n# pip3 install paramiko\r\n# pip3 install httplib2\r\n# pip3 install pyyaml\r\n# pip3 install pytz (NOTE: used by xdcr tests)\r\n# pip3 install Geohash\r\n# pip3 install python-geohash\r\n# pip3 install deepdiff\r\n# pip3 install pyes<\/pre>\n<p><span style=\"font-weight: 400\">CSDK \ubc0f Python SDK \uc124\uce58: (\ucc38\uace0:<\/span><span style=\"font-weight: 400\">\u00a0<\/span><a href=\"https:\/\/docs.couchbase.com\/c-sdk\/2.10\/start-using-sdk.html\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/c-sdk\/2.10\/start-using-sdk.html )<\/span><\/a><\/p>\n<pre class=\"lang:sh decode:true\"># wget -O- https:\/\/packages.couchbase.com\/ubuntu\/couchbase.key | sudo apt-key add -\u00a0\r\n# cat \/etc\/apt\/sources.list.d\/couchbase.list\r\ndeb [ arch=amd64 ] https:\/\/packages.couchbase.com\/releases\/couchbase-server\/enterprise\/deb\/ bionic bionic\/main\r\ndeb [ arch=amd64 ] https:\/\/packages.couchbase.com\/releases\/couchbase-server\/community\/deb\/ bionic bionic\/main\r\ndeb https:\/\/packages.couchbase.com\/ubuntu bionic bionic\/main\u00a0\r\n# apt-get update\u00a0\r\n#\u00a0 apt-get install libcouchbase-dev libcouchbase2-bin build-essential\u00a0\r\n#\u00a0 pip3 install couchbase<\/pre>\n<p>\ud604\uc7ac\ub85c\uc11c\ub294 \uc77c\ubc18\uc801\uc778 Python 3 http \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc544\ub798 \uc218\uc815\uc774 \ud544\uc694\ud558\uba70, \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \uc624\ub958\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:sh decode:true\">$ vi \/usr\/lib64\/python3.6\/http\/client.py\u00a0\u00a0 \r\nchunk to chunk.encode() in similar to the below: \r\n1078 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 chunk = f'{len(chunk):X}\\r\\n'.encode('ascii') + chunk.encode() \\<\/pre>\n<p>&nbsp;<\/td>\n<\/tr>\n<tr>\n<td><b>Windows<\/b><br \/>\n<span style=\"font-weight: 400\">\ub2e4\uc6b4\ub85c\ub4dc\ud558\uc5ec \uc124\uce58\ud569\ub2c8\ub2e4: <\/span><a href=\"https:\/\/www.python.org\/ftp\/python\/3.7.4\/python-3.7.4.exe\"><span style=\"font-weight: 400\">https:\/\/www.python.org\/ftp\/python\/3.7.4\/python-3.7.4.exe<\/span><\/a><\/p>\n<pre class=\"lang:ps decode:true\">C:\\Python\\Python37-32&gt;python.exe -VPython 3.7.4\r\nD:\\py3porting\\testrunner&gt;set PATH=C:\\Python\\Python37-32;C:\\Python\\Python37-32\\Scripts;%PATH%\r\nD:\\py3porting\\testrunner&gt;pip3 -V\r\npip 19.0.3 from c:\\python\\python37-32\\lib\\site-packages\\pip (python 3.7)<\/pre>\n<p>\ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud569\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:ps decode:true\">pip3 install libcouchbase\r\npip3 install sgmllib3k\r\npip3 install paramiko\r\npip3 install httplib2\r\npip3 install pyyaml\r\npip3 install Geohash\r\npip3 install python-geohash\r\npip3 install deepdiff\r\npip3 install pyes<\/pre>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h2><span style=\"font-weight: 400\">\ud3ec\ud305 \ud504\ub85c\uc138\uc2a4<\/span><\/h2>\n<p>\ud3ec\ud305\uc740 \ud06c\uac8c 3\ub2e8\uacc4\ub85c \uc9c4\ud589\ub429\ub2c8\ub2e4. 1) \uc790\ub3d9 \ubcc0\ud658 2) \uc218\ub3d9 \ubcc0\uacbd 3) \ub7f0\ud0c0\uc784 \uc720\ud6a8\uc131 \uac80\uc0ac \ubc0f \uc218\uc815<\/p>\n<p>\ucc98\uc74c\uc5d0\ub294 \uc6d0\ubcf8 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\ub97c \ubcf5\uc81c\ud558\uace0 \uae30\ubcf8 \uc790\ub3d9 \ubcc0\ud658 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc801\uc6a9\ud569\ub2c8\ub2e4. \uc804\uccb4 \ubcc0\ud658\uc774 \uc644\ub8cc\ub420 \ub54c\uae4c\uc9c0 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc0c8 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\ub85c \uccb4\ud06c\uc778\ud558\uc138\uc694. \uc774\ub807\uac8c \ud558\uba74 \ud604\uc7ac \ud68c\uadc0 \uc8fc\uae30\ub97c \uc911\ub2e8 \uc5c6\uc774 \uc9c4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3><span style=\"font-weight: 400\">1. \uc790\ub3d9 \ubcc0\ud658<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\ub77c\ub294 \uc790\ub3d9\ud654\ub41c \ub3c4\uad6c\uac00 \uc788\uc2b5\ub2c8\ub2e4. <\/span><a href=\"https:\/\/docs.python.org\/2\/library\/2to3.html#\"><span style=\"font-weight: 400\">2to3<\/span><\/a> \ub3c4\uad6c<span style=\"font-weight: 400\">\ub294 \uc778\uc1c4, \uc608\uc678, \ubaa9\ub85d \ub798\ud551, \uc0c1\ub300 \uc784\ud3ec\ud2b8 \ub4f1\uacfc \uac19\uc740 \uba87 \uac00\uc9c0 \uc77c\ubc18\uc801\uc778 \ud328\ud134\uc744 \ucc98\ub9ac\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\ub294 \ud30c\uc774\uc36c 3 \ud300\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub85c\uceec\ub85c \ubcf5\uc81c\ub41c \uc791\uc5c5 \uacf5\uac04\uc5d0\uc11c \ub2e8\uc77c \ub514\ub809\ud1a0\ub9ac\ub85c \uc2dc\uc791\ud558\uc5ec \ub2e4\uc2dc \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub098\uc911\uc5d0 \uc804\uccb4 \ucf54\ub4dc\uc5d0 \ub300\ud574 \ubcc0\ud658\uc744 \uc218\ud589\ud558\uc5ec \uae30\ubcf8\uc801\uc778 \ud3ec\ud305\uc744 \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p>\ub2e4\uc74c\uc740 MacOS\uc5d0\uc11c 2\ub300 3\uc73c\ub85c \ubcc0\ud658\ud558\ub294 \uba87 \uac00\uc9c0 \uc0d8\ud50c \uba85\ub839\uc5b4\uc785\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9 \uba85\ub839\uc5d0\uc11c\ub294 \ubaa8\ub4e0 \uad00\uc6a9\uad6c\uac00 \uc801\uc6a9\ub418\uc5c8\ub2e4\ub294 \uc810\uc5d0 \uc720\uc758\ud558\uc138\uc694. \uc774\ub807\uac8c \ud558\uba74 \ucc98\uc74c \ubcc0\ud658\ud560 \ub54c \uc8fc\uc694 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:sh decode:true\">(myenv) jmunta-mac:myscripts jagadeshmunta$ 2to3 . -o new -n -w .\r\nhq-mac:testrunner jagadeshmunta$ cd lib; mv lib\/couchbase_helper ..\/couchbase_helper\r\nhq-mac:testrunner jagadeshmunta$ 2to3 -f all -f buffer -f idioms -f set_literal -f ws_comma\u00a0 -n -o ~\/p3testrunner_3 -w . |tee ~\/2to3_3.txt\r\nhq-mac:testrunner jagadeshmunta$ time 2to3 -f all -f buffer -f idioms -f set_literal -f ws_comma\u00a0 -n -w . |tee ~\/2to3_4.txt\r\n$ 2to3 -f all -f buffer -f idioms -f set_literal -f ws_comma\u00a0 -n -o ~\/p3testrunner_helper -w ..\/couchbase_helper |tee ~\/2to3_helper.txt\r\ncp -R ~\/p3testrunner_helper\/* .<\/pre>\n<p>&nbsp;<\/p>\n<h3><span style=\"font-weight: 400\">2. \uc218\ub3d9 \ubcc0\uacbd<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc790\ub3d9 \ubcc0\ud658\uc740 \uc644\uc804\ud55c \ud3ec\ud305\uc744 \uc218\ud589\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uc790\ub3d9 \ubcc0\ud658 2to3 \ub3c4\uad6c\uac00 \uc218\ud589\ud558\ub294 \uc77c\ubc18\uc801\uc778 \uad6c\ubb38 \ubcc0\uacbd\ubcf4\ub2e4 \ud3ec\ud305 \ud504\ub85c\uc138\uc2a4 \uc911\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 \uc77c\ubc18\uc801\uc778 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ud14c\uc2a4\ud2b8 \ud074\ub798\uc2a4\ub97c \uc2e4\ud589\ud558\uc5ec \uc624\ub958\uac00 \uc788\ub294\uc9c0 \ud655\uc778\ud558\uace0 \uc801\uc808\ud558\uac8c \uc218\uc815\ud558\uc5ec \ubc14\uc774\ud2b8\uc5d0\uc11c \ubb38\uc790\uc5f4\ub85c \ub610\ub294 \ubb38\uc790\uc5f4\uc5d0\uc11c \ubc14\uc774\ud2b8\ub85c \uc804\ud658\ud560\uc9c0 \ub610\ub294 \uc815\ub82c\ub41c \ud568\uc218\uc758 \ud0a4 \uc774\ub984\uc744 \uc218\uc815\ud574\uc57c \ud558\ub294 \uc815\ub82c\/\ube44\uad50 \ubb38\uc81c\ub97c \ud574\uacb0\ud560\uc9c0 \uacb0\uc815\ud569\ub2c8\ub2e4. \uc774 \uacfc\uc815\uc740 \ubaa8\ub4e0 \ucf54\ub4dc \ub7f0\ud0c0\uc784\uc758 \uc720\ud6a8\uc131\uc774 \uac80\uc0ac\ub420 \ub54c\uae4c\uc9c0 \ubc18\ubcf5\uc801\uc73c\ub85c \uc218\ud589\ub429\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uacf5\ud1b5 \ud328\ud134\uc774 \ud655\uc2e4\ud574\uc9c0\uba74 grep\uacfc sed\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc5ec\ub7ec \ud074\ub798\uc2a4 \ud30c\uc77c\uc5d0\uc11c \ubc14\uafc0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub7f0\ud0c0\uc784\uae4c\uc9c0 \ub2e4\ub978 \ucf54\ub4dc\uc5d0 \ub300\ud574 \ud655\uc2e4\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \ud574\ub2f9 \ud14c\uc2a4\ud2b8 \ud074\ub798\uc2a4\uac00 \uc2e4\ud589\ub420 \ub54c\uae4c\uc9c0 \uc5f0\uae30\ud558\uc138\uc694.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ud0c0\uc0ac \ub77c\uc774\ube0c\ub7ec\ub9ac\/\ubaa8\ub4c8\uc5d0 \ubb38\uc81c\uac00 \uc788\uac70\ub098 \ubcc0\uacbd\ub418\uc5c8\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c \uc6f9\uc5d0\uc11c \uac80\uc0c9\ud558\uc5ec \uc801\uc808\ud558\uac8c \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc9c0\uc6d0\ub418\ub294 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uacfc \ub9e4\uac1c\ubcc0\uc218\uc5d0\uc11c \uc2e4\ud589\ud558\uc5ec \ubaa8\ub4e0 \ucf54\ub4dc \uacbd\ub85c\uac00 \ud3ec\ud568\ub418\ub294\uc9c0 \ud655\uc778\ud558\uc138\uc694.<\/span><\/p>\n<h3>3. \ub7f0\ud0c0\uc784 \uac80\uc99d \ubc0f \uc218\uc815<\/h3>\n<p><span style=\"font-weight: 400\">\ubcc0\ud658\uc774 \uc644\ub8cc\ub418\uba74 \ud30c\uc774\uc36c\uc740 \ub3d9\uc801 \uc5b8\uc5b4\uc774\ubbc0\ub85c \ub9ce\uc740 \ucf54\ub4dc \ub7f0\ud0c0\uc784\uc744 \uc218\ud589\ud558\uc138\uc694. \uadf8\ub807\uc9c0 \uc54a\uace0 \uc2dc\uac01\uc801\uc73c\ub85c \uc815\uc801 \ucf54\ub4dc \uac80\uc0ac\/\ubcc0\uacbd\ub9cc \uc218\ud589\ud558\uba74 \ubcc0\uacbd \uc0ac\ud56d\uc73c\ub85c \uc778\ud574 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\ubcf8 \uc815\uc0c1 \ud14c\uc2a4\ud2b8, \uc218\ub77d \ud14c\uc2a4\ud2b8\ubd80\ud130 \uc2dc\uc791\ud55c \ub2e4\uc74c \ub2e8\uc77c \ud14c\uc2a4\ud2b8 \ubaa8\ub4c8\uc5d0\uc11c \uc804\uccb4 \ud14c\uc2a4\ud2b8\ub97c \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc775\uc219\ud574\uc9c0\uba74 \ub2e4\ub978 \ubaa8\ub4e0 \ubaa8\ub4c8\uc744 \ud558\ub098\uc529 \uc801\uc6a9\ud558\uc138\uc694. \uc0c8 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uacc4\uc18d \uccb4\ud06c\uc778\ud558\uc138\uc694. \ub610\ud55c \ucd5c\uc2e0 \ube4c\ub4dc\uc5d0\uc11c \uc815\uc0c1 \ud14c\uc2a4\ud2b8\ub97c \uc2e4\ud589\ud558\uc5ec \uc774 \uc0c8 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0\uc11c \ud3ec\ud305\ub41c \ubcc0\uacbd \uc0ac\ud56d\uc5d0 \ud68c\uadc0\uac00 \uc5c6\ub294\uc9c0 \ud655\uc778\ud574\uc57c \ud569\ub2c8\ub2e4. \ub610\ud55c \uc720\ud6a8\uc131 \uac80\uc0ac\uc5d0\ub294 Python 3\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc774 \ud3ec\ud568\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">\ud30c\uc774\uc36c 3 \ud3ec\ud305\ub41c \ucf54\ub4dc \ubc0f \uc0c1\ud0dc<\/span><\/h2>\n<p><span style=\"font-weight: 400\">\uc544\ub798\ub294 \ud30c\uc774\uc36c 3 \ud3ec\ud305\ub41c \ucf54\ub4dc\uac00 \uba54\uc778 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \ubcd1\ud569\ub420 \ub54c\uae4c\uc9c0 \uc0c8 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\ub97c \ucc3e\uc744 \uc218 \uc788\ub294 \uacf3\uc785\ub2c8\ub2e4. \uacc4\ud68d\uc740 \ud55c \uc8fc\uae30\uc758 \ud3ec\ud305\uc744 \uc218\ud589\ud558\uac70\ub098 \uc911\uac04\uc5d0 \uba54\uc778 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0\uc11c \ubcc0\uacbd \uc0ac\ud56d\uc744 \uac00\uc838\uc640 \uc774\uacf3\uc73c\ub85c \uc218\ub3d9 \ubcd1\ud569\ud558\ub294 \uac83\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p><a href=\"https:\/\/github.com\/couchbaselabs\/testrunner-py3\/\"><span style=\"font-weight: 400\">https:\/\/github.com\/couchbaselabs\/testrunner-py3\/<\/span><\/a><\/p>\n<p><span style=\"font-weight: 400\">(\ube0c\ub79c\uce58: \ub9c8\uc2a4\ud130)<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub2e4\ub978 \ub7f0\ud0c0\uc784 \ubb38\uc81c\uac00 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c \ub9ce\uc740 \uc77c\ubc18\uc801\uc778 \ubcc0\uacbd \uc0ac\ud56d\uc774 \uc774\ubbf8 \uc218\ud589\ub418\uc5c8\uc9c0\ub9cc \uc644\ub8cc\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uc785\ub825 \uac12 \uc720\ud615 \ubcc0\ud658\uc5d0 \ub300\ud55c \uac00\uc815\uc73c\ub85c \uc778\ud574 \uacf5\ud1b5 \uc218\uc815 \uc0ac\ud56d\uc774 \uc774\uc804 \uc218\uc815 \uc0ac\ud56d\uc73c\ub85c \ub418\ub3cc\uc544\uac08 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc544\uc9c1 \ud30c\uc774\uc36c 3\uc5d0\uc11c \uac80\uc99d\ud574\uc57c \ud560 \ud3ec\ud305\ub41c \ucf54\ub4dc\uac00 \ub354 \uc788\uc73c\uba70 \uc774 \uc791\uc5c5\uc740 \uacc4\uc18d \uc9c4\ud589 \uc911\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p>\uc774\uc81c \uc77c\ubc18\uc801\uc778 \ubb38\uc81c\ub97c \ubcf4\uc5ec\ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4. <span style=\"font-weight: 400\">\ubc1c\uc0dd\ud55c<\/span> \ub7f0\ud0c0\uc784 \uc720\ud6a8\uc131 \uac80\uc0ac \uc911\uc785\ub2c8\ub2e4. \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc744 \ub54c \uc774\ub97c \ucc38\uc870\ud558\uc5ec \ube44\uc2b7\ud55c \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud558\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub3d9\uc77c\ud55c \ud574\uacb0 \ubc29\ubc95\uc744 \uc801\uc6a9\ud558\uc5ec \ud6a8\uacfc\uac00 \uc788\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <span style=\"font-weight: 400\">\uadf8\ub9ac\uace0<\/span> \uc0c8\ub85c\uc6b4 \uc544\uc774\ub514\uc5b4\uac00 \uc788\ub2e4\uba74 \ub313\uae00\uc5d0 \uc801\uc5b4\uc8fc\uc138\uc694.<\/p>\n<h2><span style=\"font-weight: 400\">\uc77c\ubc18\uc801\uc778 \ub7f0\ud0c0\uc784 \ubb38\uc81c<\/span><\/h2>\n<p><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400\">1. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<ul>\n<li><span style=\"font-weight: 400\">\ub7f0\ud0c0\uc784 \uc911\uc5d0 \ubc14\uc774\ud2b8 \ub300\uc2e0 \ubb38\uc790\uc5f4, \ubb38\uc790\uc5f4 \ub300\uc2e0 \ubc14\uc774\ud2b8\uc640 \uac19\uc740 \uc544\ub798 TypeError \uc911 \uc77c\ubd80\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<li><span style=\"font-weight: 400\">\uc624\ub958#1. \uc720\ud615 \uc624\ub958: \ubb38\uc790\uc5f4\uc744 \ubc14\uc774\ud2b8\uc5f4\ub85c \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<li><span style=\"font-weight: 400\">Error#2. TypeError: \ubc14\uc774\ud2b8\uac00 \uc544\ub2cc \ubb38\uc790\uc5f4\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/span>\n<ul>\n<li>\n<pre class=\"lang:python decode:true\">File \"lib\/mc_bin_client.py\", line 53, in __init__&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nif msg: supermsg += \":&amp;nbsp; \" + str(msg)\r\nTypeError: must be str, not bytes\r\n\r\nFile \"lib\/mc_bin_client.py\", line 141, in _recvMsg\u00a0\u00a0\u00a0\u00a0\r\nresponse += data\r\nTypeError: must be str, not bytes<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li><span style=\"font-weight: 400\">\uc624\ub958#3. TypeError: 'str'\uc774 \uc544\ub2cc \ubc14\uc774\ud2b8\uc5f4\uacfc \uc720\uc0ac\ud55c \uac1d\uccb4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.<\/span>\n<ul>\n<li>\n<pre class=\"lang:python decode:true\">File \"lib\/remote\/remote_util.py\", line 3038, in log_command_output&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nif \"Warning\" in line and \"hugepages\" in line:\r\nTypeError: a bytes-like object is required, not 'str'\r\n\r\nFile \"lib\/tasks\/task.py\", line 1167, in run_high_throughput_mode&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nraise Exception(rv[\"err\"])\r\nException: a bytes-like object is required, not 'str'\r\n\r\nFile \"lib\/mc_bin_client.py\", line 936, in _set_vbucket&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nself.vbucketId = (((zlib.crc32(key)) &gt;&gt; 16) &amp; 0x7fff) &amp; (self.vbucket_count - 1)\r\nTypeError: a bytes-like object is required, not 'str'\r\n\r\n\r\nFile \"lib\/mc_bin_client.py\", line 148, in _recvMsg\u00a0\u00a0\u00a0\u00a0\r\nmagic = struct.unpack(\"&gt;B\", response[0:1])[0]\r\nTypeError: a bytes-like object is required, not 'str'\r\n\r\nFile \"lib\/remote\/remote_util.py\", line 4560, in check_cmd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nif out and command_output in out[0]:\r\nTypeError: a bytes-like object is required, not 'str'\r\n<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li><span style=\"font-weight: 400\">Error#4. TypeError: str\uacfc \ube44-str \uc778\uc218\ub97c \ud63c\ud569\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.<\/span>\n<ul>\n<li>\n<pre class=\"lang:python decode:true\">File \"lib\/mc_bin_client.py\", line 126, in _sendMsg&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nself.s.send(msg + extraHeader + key + val + extended_meta_data)\r\nTypeError: can't concat str to bytes\r\n\r\nFile \"\/usr\/lib64\/python3.6\/urllib\/parse.py\", line 120, in _coerce_args\u00a0\u00a0\u00a0\u00a0\r\nraise TypeError(\"Cannot mix str and non-str arguments\")\r\nTypeError: Cannot mix str and non-str arguments<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ubb38\uc5d0 \uc788\ub294 \ubcc0\uc218\uc758 \uc720\ud615\uc744 \ud655\uc778\ud558\uace0 xxx.encode()\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubc14\uc774\ud2b8\uc5f4\uc744 \uac00\uc838\uc624\uac70\ub098 xxx.decode()\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc790\uc5f4\uc744 \uac00\uc838\uc624\uac70\ub098 \uc811\ub450\uc0ac b\ub97c \uc0ac\uc6a9\ud558\uac70\ub098 str()\uc744 \uc0ac\uc6a9\ud558\uc138\uc694. \ub54c\ub85c\ub294 \uc785\ub825\uc744 \uc54c \uc218 \uc5c6\ub294 \uacbd\uc6b0\uac00 \uc788\uc73c\uba70, \uc774 \uacbd\uc6b0 AttributeError: pass\ub97c \uc81c\uc678\ud558\uace0 x.encode()\ub97c \uc0ac\uc6a9\ud558\uc138\uc694.<\/span><\/p>\n<h4><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">2. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">TypeError: <\/span><span style=\"font-weight: 400\">root - \uc624\ub958 - ---&gt;\uc124\uce58 \uc2e4\ud328: 'str'\uc774 \uc544\ub2cc \ubc14\uc774\ud2b8\uc5f4\uacfc \uac19\uc740 \uac1d\uccb4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:\u00a0 <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc774 \uacbd\uc6b0 \ube44\uad50 \ub300\uc0c1 \ubb38\uc790\uc5f4\uc5d0 \uc811\ub450\uc0ac\ub85c b\ub97c \ucd94\uac00\ud558\uac70\ub098 \ubc14\uc774\ud2b8 \uc720\ud615\uc744 \ubb38\uc790\uc5f4 \uc720\ud615\uc73c\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4. \uc608: lib\/remote\/remote_util.py<\/span><\/p>\n<pre class=\"lang:python decode:true\">if o[0] != b\"\":\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n   o = o[0].split(b\" \")<\/pre>\n<p><span style=\"font-weight: 400\">\uc624\ub958\ub97c \uc77c\uc73c\ud0a4\ub294 \uc815\ud655\ud55c \uc904\uc744 \ud655\uc778\ud558\ub294 \uac83\uc744 \uc81c\uc678\ud558\uace0\ub294 \uc2dc\ub3c4-\ub85c \ub458\ub7ec\uc309\ub2c8\ub2e4(\uc608: \uc704\uc758 TypeError).\u00a0<\/span><\/p>\n<pre class=\"lang:python decode:true\">\u00a0import traceback\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n try:\u00a0\u00a0\r\n \r\n ..\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n \r\n except Exception as e:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n   log.info(\"{}\".format(e))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n   traceback.print_exc()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n   exc_type, exc_obj, exc_tb = sys.exc_info()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n   fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n   print(exc_type, fname, exc_tb.tb_lineno)<\/pre>\n<p><span style=\"font-weight: 400\">traceback.print_exec() \ub4a4\uc758 \uc0d8\ud50c \ucd9c\ub825\uc744 \ud1b5\ud574 \uc790\ubc14\ucc98\ub7fc \uc804\uccb4 \uc2a4\ud0dd \ucd94\uc801\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p>\uc544\ub798\uc640 \uac19\uc774 lib\/remote\/remote_util.py\ub97c \ubcc0\uacbd\ud558\uc5ec \uc218\uc815\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"lang:python decode:true\">\u00a0\u00a0\u00a0\r\n3079 \u00a0 \u00a0 \u00a0 \u00a0 for line in output:\u00a0\u00a0\u00a0\r\n3080\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0try:\u00a0\u00a0\u00a0\r\n3081 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 line=line.decode()\u00a0\u00a0\u00a0\r\n3082 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 except AttributeError:\u00a0\u00a0\u00a0\r\n3083 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 pass<\/pre>\n<h4><\/h4>\n<h4><span style=\"font-weight: 400\">3. \ubb38\uc81c(\ub4e4):<\/span><\/h4>\n<pre class=\"lang:python decode:true\">File \"lib\/membase\/api\/rest_client.py\", line 4178, in multiscan_count_for_gsi_index_with_rest&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\ncontent = content.split(\"[]\")[0]\r\nTypeError: a bytes-like object is required, not 'str'<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<pre class=\"lang:python decode:true\">content = content.split(b'[]')[0].decode()<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">4. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc77c\ubd80 \ud14c\uc2a4\ud2b8 \uc2a4\uc704\ud2b8\uc5d0 \ub300\ud574 suite_setUp() \ub610\ub294 suite_tearDown()\uc774 \ub204\ub77d\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"lang:python decode:true\">AttributeError: type object 'XDCRAdvFilterTests' has no attribute 'suite_setUp'<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ub354\ubbf8 suite_setUp() \ubc0f suite_tearDown() \uba54\uc11c\ub4dc\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.\u00a0<\/span><\/p>\n<pre class=\"lang:sh decode:true\">11a12,18\r\n&gt; \r\n&gt;     def suite_setUp(self):\r\n&gt;         print(\"*** XDCRAdvFilterTests : suite_Setup() ***\")\r\n&gt; \r\n&gt;     def suite_tearDown(self):\r\n&gt;         print(\"*** XDCRAdvFilterTests : suite_tearDown() ***\")\r\n&gt;<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">5. \ubb38\uc81c(\ub4e4):<\/span><\/h4>\n<pre class=\"lang:python decode:true\">File \".\/testrunner.py\", line 416, in main\u00a0\u00a0\u00a0\u00a0\r\nresult.errors = [(name, e.message)]\r\nAttributeError: 'AttributeError' object has no attribute 'message'<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<pre class=\"lang:python decode:true\">result.errors = [(name, str(e))]<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">6. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc18d\uc131 \uc624\ub958: '\uc804\uc1a1' \uac1c\uccb4\uc5d0 '_Thread__stop' \uc18d\uc131\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"lang:python decode:true\">File \".\/testrunner.py\", line 529, in main&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nt._Thread__stop()\r\nAttributeError: 'Transport' object has no attribute '_Thread__stop'\r\n\r\nFile \"pytests\/view\/viewquerytests.py\", line 45, in stop\u00a0\u00a0\u00a0\u00a0\r\nself._Thread__stop()\r\nAttributeError: 'StoppableThread' object has no attribute '_Thread__stop'\u00a0\u00a0\u00a0\u00a0\r\n\r\nself._stop()\r\nTypeError: 'Event' object is not callable\r\n<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ub370\ubaac\uc774 \uc544\ub2cc \uc2a4\ub808\ub4dc\ub97c \uc9c1\uc811 \uc911\uc9c0\ud560 \uc218\ub294 \uc5c6\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \uad6c\ubb38\uc0c1\uc73c\ub85c\ub294 t._stop()\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc804\uc5ed \ud50c\ub798\uadf8\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc815\uc0c1\uc801\uc73c\ub85c \uc885\ub8cc\ud558\uace0 \uc2a4\ub808\ub4dc\uc758 run()\uc744 \ud655\uc778\ud558\uc5ec \uc911\ub2e8\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">(<\/span><a href=\"https:\/\/stackoverflow.com\/questions\/27102881\/python-threading-self-stop-event-object-is-not-callable\"><span style=\"font-weight: 400\">https:\/\/stackoverflow.com\/questions\/27102881\/python-threading-self-stop-event-object-is-not-callable<\/span><\/a><span style=\"font-weight: 400\">)<\/span><\/p>\n<h3><\/h3>\n<h4><span style=\"font-weight: 400\">7. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ud14c\uc2a4\ud2b8 expirytests.ExpiryTests.test_expired_keys\ub97c \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4: \ubaa8\ub4c8 '\ubb38\uc790\uc5f4'\uc5d0 '\ubc88\uc5ed' \uc18d\uc131\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc815\uc801 \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub2e4\uc2dc \uc791\uc131\ud569\ub2c8\ub2e4. \ubaa8\ub4e0 \ubb38\uc790\ub97c \uac00\uc838\uc624\ub294 \uc774\uc804 \ubc29\ubc95\uc740 \uc5c6\uc73c\ubbc0\ub85c \uc774\uc804 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucd1d \uc9d1\ud569\uc744 \uc0ac\uc6a9\ud588\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">vi lib\/membase\/api\/tap.py\u00a0<\/span><\/p>\n<pre class=\"lang:python decode:true\">def buildGoodSet(goodChars=string.printable, badChar='?'):\u00a0\u00a0\u00a0\u00a0\r\n143 \u00a0 \u00a0 \"\"\"Build a translation table that turns all characters not in goodChars\u00a0\u00a0\u00a0\u00a0\r\n144 \u00a0 \u00a0 to badChar\"\"\"\u00a0\u00a0\u00a0\u00a0\r\n145 \u00a0 \u00a0 allChars = '\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !\"#$%&amp;\\'()*+,-.\/0123\u00a0 \u00a0 \u00a0 \u00a0 456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x9 \u00a0 \u00a0 3\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\x bb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\\u00a0 \u00a0 \u00a0 \u00a0 xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff'\u00a0\u00a0\u00a0\u00a0\r\n146 \u00a0 \u00a0 badchars = str.maketrans(allChars, allChars, goodChars)\u00a0\u00a0\u00a0\u00a0\r\n147 \u00a0 \u00a0 badchars1=str.translate(allChars,badchars)\u00a0\u00a0\u00a0\u00a0\r\n148 \u00a0 \u00a0 rv = str.maketrans(badchars1, badChar * len(badchars1))\u00a0\u00a0\u00a0\u00a0\r\n149 \u00a0 \u00a0 return rv<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">8. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">TabError: \ub4e4\uc5ec\uc4f0\uae30\uc5d0 \ud0ed\uacfc \uacf5\ubc31\uc774 \uc77c\uad00\uc131 \uc5c6\uc774 \uc0ac\uc6a9\ub428<\/span><\/p>\n<pre class=\"lang:python decode:true\">File \"pytests\/security\/audittest.py\", line 396\u00a0\u00a0\u00a0\u00a0\r\nshell = RemoteMachineShellConnection(self.master)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n^\r\nTabError: inconsistent use of tabs and spaces in indentation<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ud0ed \ubb38\uc790\ub97c \uac80\uc0c9\ud558\uace0 \uacf5\ubc31 \ubb38\uc790\ub85c \ubc14\uafc9\ub2c8\ub2e4.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc704 \ubb38\uc81c\uc758 \uacbd\uc6b0 \ud0ed \ubb38\uc790\ub97c \uc81c\uac70\ud569\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"lang:sh decode:true\">sed -i 's\/\\t\/\u00a0 \u00a0 \u00a0 \u00a0 \/g' pytests\/security\/audittest.py<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">9. \ubb38\uc81c(\ub4e4):<\/span><\/h4>\n<pre class=\"lang:python decode:true\">File \"lib\/couchbase_helper\/documentgenerator.py\", line 83, in __next__\u00a0\u00a0\u00a0\u00a0\r\nvalue = arg[seed % len(arg)]\r\nTypeError: list indices must be integers or slices, not float\r\n\r\nFile \"lib\/membase\/helper\/bucket_helper.py\", line 517, in load_some_data\u00a0\u00a0\u00a0\u00a0\r\nkeys = [\"key_%s_%d\" % (testuuid, i) for i in range(number_of_buckets)]\r\nTypeError: 'float' object cannot be interpreted as an integer\u00a0\r\n\r\nFile \"lib\/membase\/helper\/bucket_helper.py\", line 372, in verify_data\u00a0\u00a0\u00a0\u00a0\r\ntest.assertEqual(value, key, msg='values dont match')\r\nAssertionError: b'key_d918f450-5858-4430-a016-230e1f45bcf9_0' != 'key_d918f450-5858-4430-a016-230e1f45bcf9_0' : values dont match\r\n\r\nFile \"pytests\/setgettests.py\", line 90, in set_get_test\u00a0\u00a0\u00a0\u00a0\r\nself.test.fail(\"value mismatch for key {0}\".format(key))\r\nAssertionError: value mismatch for key 9fcbd36f-e34d-477b-9fc5-0a5d067dff4b\r\n\r\nFile \"pytests\/security\/auditmain.py\", line 320, in returnFieldsDef\u00a0\u00a0\u00a0\u00a0\r\nif (isinstance((particulars['mandatory_fields'][items.encode('utf-8')]), dict)):\r\nKeyError: b'bucket_name'\r\n\r\nFile \"lib\/tasks\/task.py\", line 2370, in _check_ddoc_revision\u00a0\u00a0\u00a0\u00a0\r\nnew_rev_id = self._parse_revision(meta['rev'])\r\nKeyError: 'rev'\r\n<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ub300\uc18c\ubb38\uc790 \uad6c\ubd84 \ubb38\uc81c. x_couchbase_meta \ud0a4\uc5d0\uc11c X_Couchbase_Meta\ub85c \ubcc0\uacbd\ud558\uc5ec \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">10. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<ul>\n<li><span style=\"font-weight: 400\">Error#1. TypeError: 'dict'\uc640 'dict'\uc758 \uc778\uc2a4\ud134\uc2a4 \uac04\uc5d0\ub294 '&lt;&#039;\uac00 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/span><\/li>\n<li><span style=\"font-weight: 400\">Error#2. TypeError: \uc774 \ud568\uc218\uc5d0 \ub300\ud55c \uc798\ubabb\ub41c \ud0a4\uc6cc\ub4dc \uc778\uc218\uac00 'cmp'\uc785\ub2c8\ub2e4.<\/span><\/li>\n<\/ul>\n<pre class=\"lang:python decode:true\">File \"pytests\/tuqquery\/tuq_dml.py\", line 455, in test_insert_with_select\u00a0\u00a0\u00a0\u00a0\r\nexpected_result = sorted([{bucket.name: {'name': doc['name']}} for doc in values[:num_docs]])\r\nTypeError: '&lt;' not supported between instances of 'dict' and 'dict'<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<pre class=\"lang:python decode:true\">expected_result = sorted(expected_result,key=(lambda x: x[bucket.name]['name']))<\/pre>\n<p><span style=\"font-weight: 400\">\u00a0\u00a0\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400\">11. \ubb38\uc81c(\ub4e4):<\/span><\/h4>\n<pre class=\"lang:python decode:true\">File \"pytests\/tuqquery\/tuq_2i_index.py\", line 1057, in test_simple_array_index\u00a0\u00a0\u00a0\u00a0\r\nself.assertTrue(sorted(actual_result_within['results']) == sorted(expected_result['results']))\r\nTypeError: '&lt;' not supported between instances of 'dict' and 'dict'<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<pre class=\"lang:default decode:true\">-\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.assertTrue(sorted(actual_result_within['results']) == sorted(expected_result['results']))\r\n+\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.assertTrue(sorted(actual_result_within['results'], key=(lambda x: x['name'])) == \\\r\n+\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sorted(expected_result['results'], key=(lambda x: x['name'])))<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">12. \ubb38\uc81c(\ub4e4):<\/span><\/h4>\n<pre class=\"lang:python decode:true\">File \"pytests\/tuqquery\/tuq.py\", line 1221, in _verify_results&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\r\nself.fail(\"Results are incorrect.Actual num %s. Expected num: %s.\\n\" % (len(actual_result), len(expected_result)))\r\nAssertionError: Results are incorrect.Actual num 0. Expected num: 72.\r\n\r\nFile \"lib\/tasks\/task.py\", line 3638, in filter_emitted_rows\u00a0\u00a0\u00a0\u00a0\r\nreverse=descending_set)\r\nTypeError: 'cmp' is an invalid keyword argument for this function<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<pre class=\"lang:python decode:true\">expected_rows = sorted(self.emitted_rows, key=(lambda x: (x['key'],x['id'])),reverse=descending_set)<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">13. \ubb38\uc81c(\ub4e4):<\/span><\/h4>\n<pre class=\"lang:python decode:true\">\u00a0File \"lib\/tasks\/task.py\", line 3675, in &lt;listcomp&gt;\u00a0\u00a0\u00a0\u00a0\r\nexpected_rows = [row for row in expected_rows if row['key'] &gt;= start_key and row['key'] &lt;= end_key]\r\nTypeError: '&gt;=' not supported between instances of 'int' and 'NoneType'<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc5ec\uae30\uc11c\ub294 \ud30c\uc774\uc36c 3\uc5d0\uc11c \ud30c\uc774\uc36c 2\ucc98\ub7fc \uc790\ub3d9\uc73c\ub85c \ube44\uad50\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c int\ub97c \ubc18\ud658\ud574\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">14. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<pre class=\"lang:python decode:true\">hasattr(items,\u2019iteritems\u2019) doesn\u2019t return true<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<pre class=\"lang:python decode:true\">@@ -754,7 +755,7 @@ class MemcachedClient(object):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n# If this is a dict, convert it to a pair generator\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\ncollection = self.collection_name(collection)\u00a0\r\n-\u00a0 \u00a0 \u00a0 \u00a0 if hasattr(items, 'iteritems'):\r\n+\u00a0 \u00a0 \u00a0 \u00a0 if hasattr(items, 'items'):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\nitems = iter(items.items())\r\n\r\nif hasattr(items, 'items'):<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">15. \ubb38\uc81c(\ub4e4):<\/span><\/h4>\n<pre class=\"lang:python decode:true\">\u00a0File \"lib\/crc32.py\", line 78, in crc32_hash\u00a0\u00a0\u00a0\u00a0\r\ncrc = (crc &gt;&gt; 8) ^ crc32tab[int((crc ^ ord(ch)) &amp; 0xff)]\r\nTypeError: ord() expected string of length 1, but int found<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ud0a4\ub97c \ubb38\uc790\uc5f4\ub85c \ubcc0\ud658\ud558\uc5ec ch\uac00 \uc774\uc9c4 \ud0a4\uc758 int\uac00 \uc544\ub2cc \ubb38\uc790\uc5f4\uc774 \ub418\ub3c4\ub85d \ud588\uc2b5\ub2c8\ub2e4. \ud30c\uc77c\uc744 \ucc38\uc870\ud558\uc138\uc694.<\/span><\/p>\n<pre class=\"lang:python decode:true\">try:\u00a0\r\n  key = key.decode()\r\nexcept \r\n  AttributeError:\u00a0pass<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">16. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">TypeError: 'FileNotFoundError' \uac1d\uccb4\ub294 \ud558\uc704 \uc2a4\ud06c\ub9bd\ud305\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ud30c\uc774\uc36c 3\uc5d0\uc11c FileNotFoundError\ub294 \uc11c\ube0c \uc2a4\ud06c\ub9bd\ud2b8\ud654\ud560 \uc218 \uc5c6\uc73c\ubbc0\ub85c \ub300\uc2e0 errno \uc5b4\ud2b8\ub9ac\ubdf0\ud2b8\uc778 e.errno\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"lang:python decode:true\">File \"lib\/remote\/remote_util.py\", line 1714, in create_directory\u00a0\u00a0\u00a0\u00a0\r\nif e[0] == 2:\r\nTypeError: 'FileNotFoundError' object is not subscriptable\r\n-\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if e[0] == 2:\r\n+\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if e.errno == 2:<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">17. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<pre class=\"lang:python decode:true\">Traceback (most recent call last):\u00a0\u00a0\r\nFile \"lib\/couchbase_helper\/tuq_helper.py\", line 521, in run_query_and_verify_result\u00a0\u00a0\u00a0\u00a0\r\nself._verify_results(sorted_actual_result, sorted_expected_result)\u00a0\u00a0\r\nFile \"lib\/couchbase_helper\/tuq_helper.py\", line 114, in _verify_results\u00a0\u00a0\u00a0\u00a0\r\nraise Exception(msg)\r\nException: The number of rows match but the results mismatch, please check<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158:<\/span><\/h4>\n<p><span style=\"font-weight: 400\">\uc774\uc804\uc5d0 \uc644\uc804\ud788 \uc815\ub82c\ud558\ub294 \uc815\ub82c \ud568\uc218\ub85c \uc778\ud574 \uc911\ucca9\ub41c \uc0ac\uc804\/\ubaa9\ub85d \ube44\uad50\uac00 \uc791\ub3d9\ud558\uc9c0 \uc54a\ub358 \uac83\uc774 \uc774\uc81c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub525\ub514\ud504 \ubaa8\ub4c8\uacfc \ub525\ub514\ud504 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ube44\uad50\ub97c \uc218\ud589\ud558\uc138\uc694.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">18. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">AttributeError: \ubaa8\ub4c8 '\ubb38\uc790\uc5f4'\uc5d0 'replace' \uc18d\uc131\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"lang:default decode:true\">File \"scripts\/populateIni.py\", line 52, in main\u00a0\u00a0\u00a0\u00a0\r\ndata[i] = string.replace(data[i], 'dynamic', servers[0])\r\nAttributeError: module 'string' has no attribute 'replace'<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub824\uba74 \uc544\ub798 \uadf8\ub9bc\uacfc \uac19\uc774 \uc9c1\uc811 str \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub300\uccb4\ud558\uc138\uc694.<\/span><\/p>\n<pre class=\"lang:python decode:true\">data[i].replace( 'dynamic', servers[0])<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">19. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<pre class=\"lang:python decode:true\">TypeError: '&gt;' not supported between instances of 'int' and 'str'<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<p><span style=\"font-weight: 400\">str \ub610\ub294 int \ud568\uc218\ub97c \uc801\uc808\ud788 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"lang:python decode:true\">\u00a0\u00a0if where_clause:\r\n+\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 where_clause = where_clause.replace('if\u00a0 t &gt; \"', 'if str(t) &gt; \"') # to fix the type error between int, str comparison<\/pre>\n<p>&nbsp;<\/p>\n<h4><span style=\"font-weight: 400\">20. \ubb38\uc81c(\ub4e4): <\/span><\/h4>\n<p><span style=\"font-weight: 400\">NameError: \uc774\ub984 'cmp'\uac00 \uc815\uc758\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<p><span style=\"font-weight: 400\">\ub525\ub514\ud504 \ubaa8\ub4c8\uacfc \ub525\ub514\ud504 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac1d\uccb4 \ube44\uad50\ub97c \uc218\ud589\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4>21. \ubb38\uc81c(\ub4e4):<\/h4>\n<pre class=\"lang:python decode:true\">\u00a0\u00a0File \"lib\/couchbase_helper\/tuq_helper.py\", line 782, in verify_indexes_redistributed\u00a0\u00a0\u00a0\u00a0\r\nif cmp(items_count_before_rebalance, items_count_after_rebalance) != 0:\r\nNameError: name 'cmp' is not defined<\/pre>\n<h4><span style=\"font-weight: 400\">\uc194\ub8e8\uc158: <\/span><\/h4>\n<pre class=\"lang:python decode:true\">Use deepdiff module and DeepDiff class to do object comparison.\r\n-\u00a0 \u00a0 \u00a0 \u00a0 if cmp(index_state_before_rebalance, index_state_after_rebalance) != 0:\r\n+\u00a0 \u00a0 \u00a0 \u00a0 if DeepDiff(index_state_before_rebalance, index_sFile \"lib\/couchbase_helper\/documentgenerator.py\", line 19, in has_next\u00a0\u00a0\u00a0\u00a0\r\nreturn self.itr &lt; self.end\r\nTypeError: '&lt;' not supported between instances of 'int' and 'str'<\/pre>\n<p><span style=\"font-weight: 400\">\uc704\uc758 \uc720\ud615 \uc624\ub958 \ubb38\uc81c\uc5d0 \ub300\ud574 \uc544\ub798\uc640 \uac19\uc774 str\uc744 int\ub85c \ubcc0\ud658\ud569\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"lang:python decode:true\">return int(self.itr) &lt; int(self.end)<\/pre>\n<p>&#8212;-<\/p>\n<p>\uc5ec\uae30\uae4c\uc9c0 \ud30c\uc774\uc36c \ubc84\uc804 2\ub97c \ud30c\uc774\uc36c \ubc84\uc804 3\uc73c\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc\ud560 \ub54c \uc8fc\uc758\ud574\uc57c \ud560 \ubb38\uc81c \ubaa9\ub85d\uc5d0 \ub300\ud574 \uc54c\uc544\ubd24\uc2b5\ub2c8\ub2e4. \ud5a5\ud6c4 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \ub354 \ub9ce\uc740 \ud559\uc2b5 \ub0b4\uc6a9\uc744 \uac8c\uc2dc\ud560 \uc608\uc815\uc785\ub2c8\ub2e4. \uadf8\ub3d9\uc548 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc5d0 \ud589\uc6b4\uc744 \ube55\ub2c8\ub2e4!<\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">\ub354 \uc77d\uc5b4\ubcf4\uae30<\/span><\/h2>\n<p>\ub2e4\uc74c \ucc38\uace0 \uc790\ub8cc\uac00 \ub3c4\uc6c0\uc774 \ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc544\ub798 \ucc38\uc870 \ub9c1\ud06c\uc5d0\uc11c \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \uc77d\uace0 Python 3\uc73c\ub85c\uc758 \ucf54\ub4dc \ud3ec\ud305\uc744 \uac1c\uc120\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ol>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.python.org\/dev\/peps\/pep-0373\/\"><span style=\"font-weight: 400\">https:\/\/www.python.org\/dev\/peps\/pep-0373\/<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/wiki.python.org\/moin\/Python2orPython3\"><span style=\"font-weight: 400\">https:\/\/wiki.python.org\/moin\/Python2orPython3<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/www.toptal.com\/python\/python-3-is-it-worth-the-switch\"><span style=\"font-weight: 400\">https:\/\/www.toptal.com\/python\/python-3-is-it-worth-the-switch<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/weknowinc.com\/blog\/running-multiple-python-versions-mac-osx\"><span style=\"font-weight: 400\">https:\/\/weknowinc.com\/blog\/running-multiple-python-versions-mac-osx<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/docs.python.org\/3\/howto\/pyporting.html\"><span style=\"font-weight: 400\">https:\/\/docs.python.org\/3\/howto\/pyporting.html<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/wsvincent.com\/install-python3-mac\/\"><span style=\"font-weight: 400\">https:\/\/wsvincent.com\/install-python3-mac\/<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/python3porting.com\/pdfs\/SupportingPython3-screen-1.0-latest.pdf\"><span style=\"font-weight: 400\">https:\/\/python3porting.com\/pdfs\/SupportingPython3-screen-1.0-latest.pdf<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/riptutorial.com\/Download\/python-language.pdf\"><span style=\"font-weight: 400\">https:\/\/riptutorial.com\/Download\/python-language.pdf<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/docs.couchbase.com\/python-sdk\/2.5\/start-using-sdk.html\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/python-sdk\/2.5\/start-using-sdk.html<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/docs.couchbase.com\/c-sdk\/2.10\/start-using-sdk.html\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/c-sdk\/2.10\/start-using-sdk.html<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/pypi.org\/project\/deepdiff\/\"><span style=\"font-weight: 400\">https:\/\/pypi.org\/project\/deepdiff\/<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/buildmedia.readthedocs.org\/media\/pdf\/portingguide\/latest\/portingguide.pdf\"><span style=\"font-weight: 400\">https:\/\/buildmedia.readthedocs.org\/media\/pdf\/portingguide\/latest\/portingguide.pdf<\/span><\/a><\/li>\n<li style=\"font-weight: 400\"><a href=\"https:\/\/ptgmedia.pearsoncmg.com\/imprint_downloads\/informit\/promotions\/python\/python2python3.pdf\"><span style=\"font-weight: 400\">https:\/\/ptgmedia.pearsoncmg.com\/imprint_downloads\/informit\/promotions\/python\/python2python3.pdf<\/span><\/a><\/li>\n<\/ol>\n<p>\uc990\uac70\uc6b4 \uc2dc\uac04 \ubcf4\ub0b4\uc168\uae30\ub97c \ubc14\ub78d\ub2c8\ub2e4!<\/p>\n<p><strong>\uba74\ucc45 \uc870\ud56d:<\/strong> \uc774 \ubb38\uc11c\ub294 \ud3ec\ud305 \ubb38\uc81c \ud574\uacb0\uc744 \uc704\ud55c \uc644\uc804\ud55c \uac00\uc774\ub4dc\uac00 \uc544\ub2c8\ub77c Python 3 \uc5c5\uadf8\ub808\uc774\ub4dc\ub97c \uc704\ud55c \ube60\ub978 \ucc38\uace0 \uc790\ub8cc\ub85c \uac04\uc8fc\ud574 \uc8fc\uc138\uc694. \uc5ec\uae30\uc11c\ub294 \uc5b4\ub290 \uc815\ub3c4 \ub3c4\uc6c0\uc744 \ub4dc\ub9ac\uace0 \ud3ec\ud305 \ud504\ub85c\uc138\uc2a4\ub97c \uc2dc\uc791\ud558\ub294 \ub370 \ub3c4\uc6c0\uc744 \ub4dc\ub9ac\uace0\uc790 \ud569\ub2c8\ub2e4. \ub3c4\uc6c0\uc774 \ub420 \ub9cc\ud55c \uc0c8\ub85c\uc6b4 \uc0ac\uc2e4\uc744 \uc54c\uac8c \ub418\uc5c8\ub2e4\uba74 \uc5b8\uc81c\ub4e0\uc9c0 \uacf5\uc720\ud574 \uc8fc\uc138\uc694. \uae0d\uc815\uc801\uc778 \ud53c\ub4dc\ubc31\uc744 \ubcf4\ub0b4\uc8fc\uc2dc\uba74 \uac10\uc0ac\ud558\uaca0\uc2b5\ub2c8\ub2e4!<\/p>\n<p>&nbsp;<\/p>\n<p>&#8212;<\/p>\n<p>\uc911\uc694\ud55c \uc758\uacac\uacfc \ud53c\ub4dc\ubc31\uc744 \uc81c\uacf5\ud574\uc8fc\uc2e0 Raju Suravarjjala\uc640 Keshav Murthy\uc5d0\uac8c \uac10\uc0ac\ub4dc\ub9bd\ub2c8\ub2e4.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Introduction The last major Python upgrade &#8212; to version 3 &#8212; arrived in Dec. 2008, nearly 12 years ago. And yet there is a good chance that you are still working on the Python 2 product or test code. If [&hellip;]<\/p>","protected":false},"author":46261,"featured_media":9922,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2381,1816,9139,2389],"tags":[1725],"ppma_author":[9096],"class_list":["post-7726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-community","category-couchbase-server","category-python","category-solutions","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python 2 to 3 Migration: How to Update &amp; Key Differences<\/title>\n<meta name=\"description\" content=\"Learn how to update from Python 2 to 3 in this post from Couchbase. We also cover their key differences and identify common problems with migration.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Update Python 2 to Python 3 &amp; The Differences Between Them\" \/>\n<meta property=\"og:description\" content=\"Learn how to update from Python 2 to 3 in this post from Couchbase. We also cover their key differences and identify common problems with migration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-13T21:34:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T04:25:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1575\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jagadesh Munta, Principal Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jagadesh Munta, Principal Software Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/\"},\"author\":{\"name\":\"Jagadesh Munta, Principal Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5efab7fca2a650b389d487e721997306\"},\"headline\":\"How to Update Python 2 to Python 3 &amp; The Differences Between Them\",\"datePublished\":\"2019-10-13T21:34:34+00:00\",\"dateModified\":\"2025-06-14T04:25:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/\"},\"wordCount\":2541,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg\",\"keywords\":[\"NoSQL Database\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Community\",\"Couchbase Server\",\"Python\",\"Solutions\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/\",\"name\":\"Python 2 to 3 Migration: How to Update & Key Differences\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg\",\"datePublished\":\"2019-10-13T21:34:34+00:00\",\"dateModified\":\"2025-06-14T04:25:16+00:00\",\"description\":\"Learn how to update from Python 2 to 3 in this post from Couchbase. We also cover their key differences and identify common problems with migration.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg\",\"width\":1575,\"height\":628,\"caption\":\"Developers discuss how to upgrade python.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Update Python 2 to Python 3 &amp; The Differences Between Them\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5efab7fca2a650b389d487e721997306\",\"name\":\"Jagadesh Munta, Principal Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/2b547f1e03e58f24f78d6318913302d1\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6d1189147482e8a4e1c0d2a3db919014c2cfe816b6d11357c3fd740f9deadd31?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6d1189147482e8a4e1c0d2a3db919014c2cfe816b6d11357c3fd740f9deadd31?s=96&d=mm&r=g\",\"caption\":\"Jagadesh Munta, Principal Software Engineer, Couchbase\"},\"description\":\"Jagadesh Munta is a Principal Software Engineer at Couchbase Inc. USA. Prior to this, he was a veteran in Sun Microsystems and Oracle together for 19 years. Jagadesh is holding Masters in Software Engineering at San Jose State University,USA and B.Tech. Computer Science and Engineering at JNTU,India. He is an author of \\\"Software Quality and Java Automation Engineer Survival Guide\u201d to help Software developers and Quality automation engineers.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/jagadesh\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python 2 to 3 Migration: How to Update & Key Differences","description":"Couchbase\uc758 \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c Python 2\uc5d0\uc11c 3\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694. \ub610\ud55c \ub450 \ubc84\uc804\uc758 \uc8fc\uc694 \ucc28\uc774\uc810\uc744 \uc0b4\ud3b4\ubcf4\uace0 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uacfc \uad00\ub828\ub41c \uc77c\ubc18\uc801\uc778 \ubb38\uc81c\ub97c \ud30c\uc545\ud569\ub2c8\ub2e4.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/","og_locale":"ko_KR","og_type":"article","og_title":"How to Update Python 2 to Python 3 &amp; The Differences Between Them","og_description":"Learn how to update from Python 2 to 3 in this post from Couchbase. We also cover their key differences and identify common problems with migration.","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-10-13T21:34:34+00:00","article_modified_time":"2025-06-14T04:25:16+00:00","og_image":[{"width":1575,"height":628,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg","type":"image\/jpeg"}],"author":"Jagadesh Munta, Principal Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jagadesh Munta, Principal Software Engineer, Couchbase","Est. reading time":"11\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/"},"author":{"name":"Jagadesh Munta, Principal Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5efab7fca2a650b389d487e721997306"},"headline":"How to Update Python 2 to Python 3 &amp; The Differences Between Them","datePublished":"2019-10-13T21:34:34+00:00","dateModified":"2025-06-14T04:25:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/"},"wordCount":2541,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg","keywords":["NoSQL Database"],"articleSection":["Best Practices and Tutorials","Community","Couchbase Server","Python","Solutions"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/","url":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/","name":"Python 2 to 3 Migration: How to Update & Key Differences","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg","datePublished":"2019-10-13T21:34:34+00:00","dateModified":"2025-06-14T04:25:16+00:00","description":"Couchbase\uc758 \uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c Python 2\uc5d0\uc11c 3\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc138\uc694. \ub610\ud55c \ub450 \ubc84\uc804\uc758 \uc8fc\uc694 \ucc28\uc774\uc810\uc744 \uc0b4\ud3b4\ubcf4\uace0 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uacfc \uad00\ub828\ub41c \uc77c\ubc18\uc801\uc778 \ubb38\uc81c\ub97c \ud30c\uc545\ud569\ub2c8\ub2e4.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/10\/update-python-blogbanner.jpg","width":1575,"height":628,"caption":"Developers discuss how to upgrade python."},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/tips-and-tricks-for-upgrading-from-python-2-to-python-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Update Python 2 to Python 3 &amp; The Differences Between Them"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5efab7fca2a650b389d487e721997306","name":"Jagadesh Munta, \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/2b547f1e03e58f24f78d6318913302d1","url":"https:\/\/secure.gravatar.com\/avatar\/6d1189147482e8a4e1c0d2a3db919014c2cfe816b6d11357c3fd740f9deadd31?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6d1189147482e8a4e1c0d2a3db919014c2cfe816b6d11357c3fd740f9deadd31?s=96&d=mm&r=g","caption":"Jagadesh Munta, Principal Software Engineer, Couchbase"},"description":"\uc790\uac00\ub370\uc2dc \ubb38\ud0c0\ub294 \ubbf8\uad6d Couchbase Inc. \uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. \uadf8 \uc804\uc5d0\ub294 19\ub144 \ub3d9\uc548 Sun Microsystems\uc640 Oracle\uc5d0\uc11c \ud568\uaed8 \uadfc\ubb34\ud55c \ubca0\ud14c\ub791\uc785\ub2c8\ub2e4. \ubbf8\uad6d \uc0b0\ud638\uc138 \uc8fc\ub9bd\ub300\ud559\uad50\uc5d0\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uacf5\ud559 \uc11d\uc0ac \ud559\uc704\ub97c, JNTU\uc5d0\uc11c \ucef4\ud4e8\ud130 \uacf5\ud559 \ud559\uc0ac \ud559\uc704\ub97c \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \uc778\ub3c4 JNTU\uc5d0\uc11c \ucef4\ud4e8\ud130 \uacfc\ud559 \ubc0f \uacf5\ud559 \ud559\uc0ac \ud559\uc704\ub97c \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \uadf8\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc790\uc640 \ud488\uc9c8 \uc790\ub3d9\ud654 \uc5d4\uc9c0\ub2c8\uc5b4\ub97c \ub3d5\uae30 \uc704\ud55c \"\uc18c\ud504\ud2b8\uc6e8\uc5b4 \ud488\uc9c8 \ubc0f Java \uc790\ub3d9\ud654 \uc5d4\uc9c0\ub2c8\uc5b4 \uc0dd\uc874 \uac00\uc774\ub4dc\"\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4.","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/jagadesh\/"}]}},"authors":[{"term_id":9096,"user_id":46261,"is_guest":0,"slug":"jagadesh","display_name":"Jagadesh Munta, Principal Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/6d1189147482e8a4e1c0d2a3db919014c2cfe816b6d11357c3fd740f9deadd31?s=96&d=mm&r=g","author_category":"","last_name":"Munta, Principal Software Engineer, Couchbase","first_name":"Jagadesh","job_title":"","user_url":"","description":"\uc790\uac00\ub370\uc2dc \ubb38\ud0c0\ub294 \ubbf8\uad6d Couchbase Inc. \uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. \uadf8 \uc804\uc5d0\ub294 19\ub144 \ub3d9\uc548 Sun Microsystems\uc640 Oracle\uc5d0\uc11c \ud568\uaed8 \uadfc\ubb34\ud55c \ubca0\ud14c\ub791\uc785\ub2c8\ub2e4. \ubbf8\uad6d \uc0b0\ud638\uc138 \uc8fc\ub9bd\ub300\ud559\uad50\uc5d0\uc11c \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uacf5\ud559 \uc11d\uc0ac \ud559\uc704\ub97c, JNTU\uc5d0\uc11c \ucef4\ud4e8\ud130 \uacf5\ud559 \ud559\uc0ac \ud559\uc704\ub97c \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \uc778\ub3c4 JNTU\uc5d0\uc11c \ucef4\ud4e8\ud130 \uacfc\ud559 \ubc0f \uacf5\ud559 \ud559\uc0ac \ud559\uc704\ub97c \ubc1b\uc558\uc2b5\ub2c8\ub2e4. \uadf8\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c\uc790\uc640 \ud488\uc9c8 \uc790\ub3d9\ud654 \uc5d4\uc9c0\ub2c8\uc5b4\ub97c \ub3d5\uae30 \uc704\ud55c \"\uc18c\ud504\ud2b8\uc6e8\uc5b4 \ud488\uc9c8 \ubc0f Java \uc790\ub3d9\ud654 \uc5d4\uc9c0\ub2c8\uc5b4 \uc0dd\uc874 \uac00\uc774\ub4dc\"\uc758 \uc800\uc790\uc774\uae30\ub3c4 \ud569\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/7726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/46261"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=7726"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/7726\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/9922"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=7726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=7726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=7726"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=7726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}