<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Bunny Code</title>
    <link>https://bunnycode.tistory.com/</link>
    <description>버즈밴드의 공부 과정 기록중</description>
    <language>ko</language>
    <pubDate>Wed, 12 Aug 2026 01:23:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>버즈밴드</managingEditor>
    <image>
      <title>Bunny Code</title>
      <url>https://tistory1.daumcdn.net/tistory/4029483/attach/16d24b92a6b340fd92b0969fcaab4f48</url>
      <link>https://bunnycode.tistory.com</link>
    </image>
    <item>
      <title>Matplotlib x축 선형 그대로 표현 방법만 바꾸기 (1e8 &amp;rarr; $10^8$)</title>
      <link>https://bunnycode.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;
&lt;script src=&quot;https://polyfill.io/v3/polyfill.min.js?features=es6&quot;&gt;&lt;/script&gt;
&lt;script&gt; MathJax = { tex: {inlineMath: [['$', '$'], ['\\(', '\\)']]} }; &lt;/script&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js&quot;&gt;&lt;/script&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;논문 Figure를 그리다 보면 그래프 안의 요소들을 바꾸어야 할 일들이 많다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;선의 색상, 두께, 글자 크기 등 많은 것들은 검색을 통해 쉽게 바꿀 수 있지만,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;x축 표현 방법과 관련 숫자 크기를 바꾸는 내용은 쉽게 찾을 수 없어 직접 포스팅하고자 한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;무슨 상황인지 설명을 먼저 해보자.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1700916850721&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100) * 10**7
y = np.ones_like(x) * 5

plt.figure(figsize=(6, 6))
plt.plot(x, y, 'r-')
plt.show()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;위와 같이 코드를 작성하면, 다음의 그래프를 그릴 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ykodc/btsASdjyRmO/bb9og9QW1PFBc9XUuE7CLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ykodc/btsASdjyRmO/bb9og9QW1PFBc9XUuE7CLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ykodc/btsASdjyRmO/bb9og9QW1PFBc9XUuE7CLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYkodc%2FbtsASdjyRmO%2Fbb9og9QW1PFBc9XUuE7CLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;405&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문제는 x축의 $1e8$ 부분이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;제출하고자 하는 journal 혹은 conference에 따라 $1e8$이  아니라 10의 거듭제곱 표현 방식인 $10^8$로 작성해야할 때가 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이와 같은 문제를 검색하면 그래프의 x축을 선형 축이 아닌 로그 축으로 바꾸는 방법들이 주로 나와 답답했는데 간단한 해결방법을 찾았다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아래 코드 한줄이면 해결 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1700916850722&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;plt.gca().ticklabel_format(axis='x', useMathText=True)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;$10^8$의 크기도 그래프의 다른 숫자들과 마찬가지로 fontsize를 통해 조절가능하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;원하는 fontsize를 다음과 같이 입력하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1700916850722&quot; class=&quot;python&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;plt.gca().xaxis.get_offset_text().set_fontsize(20)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;코드 두 줄을 추가한 그래프를 보면 축을 표현하는 방법과 그 크기가 잘 바뀐 것을 확인할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BvYIE/btsATkvunSY/dLJyDMsmVbgulYEwVsQ5G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BvYIE/btsATkvunSY/dLJyDMsmVbgulYEwVsQ5G1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BvYIE/btsATkvunSY/dLJyDMsmVbgulYEwVsQ5G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBvYIE%2FbtsATkvunSY%2FdLJyDMsmVbgulYEwVsQ5G1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;418&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Python Basic</category>
      <category>Figure</category>
      <category>Python</category>
      <category>그래프</category>
      <category>논문</category>
      <category>파이썬</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/32</guid>
      <comments>https://bunnycode.tistory.com/32#entry32comment</comments>
      <pubDate>Sat, 25 Nov 2023 21:56:57 +0900</pubDate>
    </item>
    <item>
      <title>Efficient Off-Policy Meta-Reinforcement Learning via Probabilistic Context Variables[ICML 2019]</title>
      <link>https://bunnycode.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;저자 : Kate Rakelly*, Aurick Zhou*, Deirdre Quillen, Chelsea Finn, Sergey Levine&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;논문 출처 : &lt;a style=&quot;color: #000000;&quot; href=&quot;https://arxiv.org/pdf/1903.08254.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://arxiv.org/pdf/1903.08254.pdf&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고하면 좋은 영상 : &lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.youtube.com/watch?v=w9KAmvUA9WI&amp;amp;t=691s&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.youtube.com/watch?v=w9KAmvUA9WI&amp;amp;t=691s&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;0. Abstract&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기존 Meta Learning 방법들은 대부분 &lt;b&gt;on-policy&lt;/b&gt; 에 의존&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이는 sample efficiency의 큰 저하를 불러옴&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로운 task에 적응할 때, task uncertainty를 추론하는 메커니즘이 부족해 sparse reward problems에서 효과를 제한함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;task inference와 control을 분리하는 &lt;b&gt;off-policy Meta-RL 알고리즘&lt;/b&gt;을 사용하여 위의 문제들을 해결&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;적은 경험으로 어떻게 task를 푸는지 추론하는 online probabilistic filtering of latent task variables 이용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;확률론적 추론은 구조적이고 효율적인 exploration을 위한 posterior sampling을 가능하게함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이전의 알고리즘들보다 sample efficiency 측면에서 20~100배의 성능을 보여줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;1. Introduction&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;on-policy Meta Learning은 학습 과정에서 많은 양의 데이터를 필요로 하기 때문에 효율적이지 못함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;부족한 sample efficiency를 향상시키기 위해서는 off-policy data로 학습하는 과정이 필요&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;behavior policy와 target policy가 다른 policy가 off-policy임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;e.g. Soft Actor Critic, DQN (Replaybuffer 사용)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러나 off-policy data를 사용하면 meta-train 과정에서 본 data와 test 과정에서 본 data가 구조적으로 다름으로 학습에 어려움이 생김&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이를 해결하기 위해 meta-train 과정에서 &lt;b&gt;probabilistic encoder&lt;/b&gt;를 학습함&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;probabilistic encoder는 과거의 경험들을 context variables로 바꿔주고 이는 policy로 하여금 task를 수행할 수 있게 만들어줌&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;즉, task inference와 policy를 분리시켜줌으로서 off-policy data를 이용가능하게 만듬&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;policy는 off-policy data로 학습됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;probabilistic encoder(task inference)는 on-policy data로 학습됨 (meta-train과 meta-test data 사이의 distribution mismatch를 줄이는 방향으로)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;meta-test 과정에서는 meta-train에서 학습된 probabilistic encoder를 통하여 새로운 task inference를 수행한 후 생성된 latent variable을 이용해 효율적인 exploration 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2. Related Work&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Meta Learning&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Context-based method : task의 latent representation variable을 학습하고 이를 condition으로 policy 생성&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PEARL은 기존의 방법과 다르게 task를 probabilistic latent variable로 표현해 task의 uncertainty를 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한 많이 사용하는 RNN을 사용하지 않고 encoder를 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Gradient-based method : on-policy data를 활용한 Policy gradient를 사용해 policy 생성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;PEARL은 off-policy data를 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Probabilistic Meta Learning&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Posterior Sampling&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;고전적인 RL에서 posterior sampling은 가능한 MDP에 대해 posterior를 sampling 하고 sampling된 MDP를 고려해 확장된 exploration을 가능하게 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PEARL에서는 이를 meta-learning 입장에서 바라보고 현재 task의 uncertainty를 포착해 새로운 task에 대해서도 구조적인 exploration을 가능하게 만듬&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Partially observed MDPs&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;task를 관측되지 않은 state의 일부로 본다면 test 과정에서 adaptation하는 문제는 POMDP의 문제로 볼 수도 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PEARL은 task의 belief를 estimate하기 위해 기존 POMDP 문제를 풀 때 사용하는 variational 접근을 사용함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;3. Problem Statement&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$\tau = \{p(s_0),p(s_{t+1}|s_t,a_t),r(s_t,a_t)\}$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;context c&lt;/i&gt;&amp;nbsp;: the history of past transitions&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$C^\tau_n = (s_n,a_n,r_n,s_n')$&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;4. Probabilistic Latent Context&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;새로운 task의 recent experience를 이용하여 latent variable Z를 추론하기 위해 meta-train task 이용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;추론된 Z를 이용해 $\pi_\theta(a|s,z)$를 optimize&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;4.1. Modeling and Learning Latent Contexts&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$p(z|c)$를 추정하기 위해 inference network $q_\phi(z|c)$ encoder를 활용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$q_\phi(z|c)$를 optimize하기 위해 MDP의 reconstruct을 이용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;알고리즘의 objective function(목적 함수)는 다음과 같음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$\mathbb{E}_\tau[\mathbb{E}_{z\sim q_\phi(z|c^\tau)} [R(\tau,z) + \beta D_{KL}(q_\phi(z|c^\tau)||p(z))] ] $&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px; color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;KL Divergence 항은 information bottleneck 역할을 맡음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Deep variational information bottleneck, &lt;a style=&quot;color: #000000;&quot; href=&quot;https://arxiv.org/pdf/1612.00410.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://arxiv.org/pdf/1612.00410.pdf&lt;/a&gt; 참고&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;meta-train data에 overfitting하는 것을 완화해줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;meta-train할 때만, $q_\phi$가 optimize되고, meta-test 시에는 학습된 network를 이용하여 latent context Z를 추론만 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;fully observed MDP는 순서에 상관 없는(permutation invariant) transitions들의 집합으로 task가 무엇인지 추론할 수 있어야함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위와 같은 생각으로, $q_\phi(z|c_{1:N}$을 단일 transition으로 추론한 factors의 곱으로 표현&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;$q_\phi(z|c_{1:N})\propto \Pi^N_{n=1}\Psi_\phi (z|c_n)$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 그림 참고&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Fi92/btruFehRnYK/wFHGoXQEeUWVnYCSQxqTFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Fi92/btruFehRnYK/wFHGoXQEeUWVnYCSQxqTFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Fi92/btruFehRnYK/wFHGoXQEeUWVnYCSQxqTFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Fi92%2FbtruFehRnYK%2FwFHGoXQEeUWVnYCSQxqTFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;589&quot; height=&quot;263&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;4.2. Posterior Sampling and Exploration via Latent Contexts&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;확률론적으로 모델링한 latent context는 meta-test 과정에서 posterior sampling을 이용해 효율적인 exploration을 가능하게 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;PEARL은 MDP reconstruction, Actor, Critic 등의 최적화를 통해 직접 posterior over the latent context Z 추론 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;meta-train 과정에서는 meta-train data&lt;span style=&quot;background-color: #fdfdfd;&quot;&gt;를 활용하여 task에 대한 distribution을 포착하고 experience를 활용하여 새로운 task를 추론하는 방법을 학습함&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;meta-test 과정에서는 episode마다 z를 prior에서 sampling 하고 z가 condition된 policy를 수행함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쌓이는 경험들을 모아 posterior를 다시 update하고 이 과정을 반복하면 점점 policy가 optimal하게됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;5. Off-Policy Meta-Reinforcement Learning&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;off-policy를 probabilistic context model과 합치고 싶은 이유는 meta-training과 fast adaptation 모두에서 sample efficiency를 향상시키고 싶어서임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그러나 현대 meta-RL은 meta-train과 adaptation 하고 싶은 meta-test 사이의 distribution이 동일하다고 가정하기 때문에 off-policy를 meta-RL에 이용하기 쉽지 않음&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 말은 곧,&amp;nbsp; meta-test 과정이 on-policy로 이루어지기 때문에 meta-train 과정도 on-policy로 이루어져야함을 뜻함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;또한 meta-RL은 효과적인 확률적 exploration을 학습하기 위해 policy가 distribution에 대해 추론해야함&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 문제는 TD-error를 minimize하는 off-policy RL로 풀 수 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;방문한 state들에 대한 distribution을 직접 optimize할 수 없기 때문&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;직접 action들을 control 하는 on-policy RL은 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위와 같은 문제점을 해결하고 sample efficiency가 좋은 off-policy RL을 활용하기 위해, encoder 학습을 위한 data(on-policy)와 policy 학습을 위한 data(off-policy loop)를 분리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;전체 Replaybuffer B에서 sampling된 off-policy data로 actor와 critic이 학습됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;encoder는 정의한 sampler Sc에서 sampling된 context batches를 이용해 학습됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;sampler Sc가 entire buffer에서 sampling되는 경우, on-policy test data와의 distribution mismatch가 생길 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;하지만 context는 on-policy를 엄격하게 따를 필요는 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;on-policy와 off-policy 사이의 접근방법으로 최근 수집된 data들로 이루어진 replaybuffer를 이용하는 것이 on-policy data를 사용하는 것보다 더 나은 효율성과 비슷한 성능을 보임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;meta-train procedure는 다음과 같음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;801&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmButr/btruQrmrF4n/YRFxY7n3AdxgTz9HfHaQi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmButr/btruQrmrF4n/YRFxY7n3AdxgTz9HfHaQi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmButr/btruQrmrF4n/YRFxY7n3AdxgTz9HfHaQi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmButr%2FbtruQrmrF4n%2FYRFxY7n3AdxgTz9HfHaQi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;397&quot; height=&quot;326&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;801&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;5.1. Implementation&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;SAC(Soft Actor Critic) 알고리즘을 off-policy method로 사용&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;stability와 sample efficiency 측면에서 좋고, probabilistic interpretation(entropy)가 있기에 결합하기 좋다고 판단&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;VAE(Variational Auto Encoder)와 마찬가지로, sampling에서 오는 미분 불가 문제를 reparameterization trick을 이용해 해결&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;encoder를 학습할 때 MDP의 reconstruction이나 rewards를 maximize하는 것보다 state-action value function, 즉 qfunction을 reconstruct하는 방향으로 학습하는 것이 효율적임을 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Critic Loss는 다음과 같음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;$L_{critic}=\mathbb{E}_{(s,a,r,s')\sim\beta, z\sim q_{\phi}(z|c)}[Q_\theta (s,a,z) - (r+\overline{V}(s',\overline{z}))]^2$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;$\overline{V}$는 target network를 의미하고 $\overline{z}$는 gradient가 계산되지 않음을 의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Actor Loss는 z가 추가된 것 뿐이지 SAC와 동일하고, 다음과 같음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;$L_{actor}=\mathbb{E}_{s\sim\beta,a\sim\pi_\theta,z\sim q_\phi(z|c)}[D_{KL}(\pi_\theta(a|s,\overline{z})||\frac{exp(Q_\theta(s,a,\overline{z}))}{Z_\theta(s)})]$&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;context data sampler Sc는 최근에 수집된 data에서 sampling이 이루어지고, actor-critic을 위한 data는 entire replaybuffer에서 sampling이 이루어짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;위의 과정들이 정리된 알고리즘은 다음과 같음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LXhST/btrutkv8pSv/9fu6aSkXoK94Xoz6vNKl1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LXhST/btrutkv8pSv/9fu6aSkXoK94Xoz6vNKl1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LXhST/btrutkv8pSv/9fu6aSkXoK94Xoz6vNKl1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLXhST%2Fbtrutkv8pSv%2F9fu6aSkXoK94Xoz6vNKl1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;695&quot; height=&quot;455&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;6. Experiments&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;6.1. Sample Efficiency and Performance&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Mujoco Simulator 환경에서 실험 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FsFvS/btruFeiK5He/MoMQVkzPcDrlglkSlIsIF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FsFvS/btruFeiK5He/MoMQVkzPcDrlglkSlIsIF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FsFvS/btruFeiK5He/MoMQVkzPcDrlglkSlIsIF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFsFvS%2FbtruFeiK5He%2FMoMQVkzPcDrlglkSlIsIF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;776&quot; height=&quot;230&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Half Cheetah, Humanoid, Ant : reward setting이 다른 task에 adaptation하는게 목표&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Walker : dynamics setting(transition probability)가 다른 task에 adaptation하는게 목표&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;gradient-based meta-RL ProMP와 MAML-TRPO, recurrent-based meta-RL RL^2(with PPO)와 비교실험&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KJZAG/btruHwJYbwq/H79aJVVAWpUA6mwLnGb820/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KJZAG/btruHwJYbwq/H79aJVVAWpUA6mwLnGb820/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KJZAG/btruHwJYbwq/H79aJVVAWpUA6mwLnGb820/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKJZAG%2FbtruHwJYbwq%2FH79aJVVAWpUA6mwLnGb820%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;716&quot; height=&quot;423&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;PEARL 방법은 기존의 meta-RL 방법들보다 sample-efficiency 측면에서 20-100x의 성능을 보여줌&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;뿐만 아니라, 최종 도달 성능도 50-100%의 높은 성능을 보여줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;6.2. Posterior Sampling For Exploration&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;posterior sampling이 얼마나 exploration하는데 효율적인지 검증하는 실험을 수행함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;2D navigation task with a point robot 사용&amp;nbsp;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;edge 부분에 생기는 특정 radius를 가진 파란 원에 도달하는 것이 목표&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;sparse reward problem임&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&amp;nbsp;PEARL과 마찬가지로 probabilistic task variables를 모델링하지만 on-policy gradient-based meta-RL인 MAESN과 비교실험&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;meta-train, meta-test 과정 모두 PEARL이 더 뛰어난 sample efficiency 성능을 보임&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;851&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecBJNY/btruMoc6sMK/420bnsj5sksFxccnVx3Ep0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecBJNY/btruMoc6sMK/420bnsj5sksFxccnVx3Ep0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecBJNY/btruMoc6sMK/420bnsj5sksFxccnVx3Ep0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FecBJNY%2FbtruMoc6sMK%2F420bnsj5sksFxccnVx3Ep0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;635&quot; data-origin-width=&quot;641&quot; data-origin-height=&quot;851&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;6.3. Ablations&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Inference Network Architecture&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;permutation-invariant encoder vs RNN (unordrered transitions) vs RNN (sets of trajectories)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;permutation-invariant encoder의 성능이 가장 좋음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;RNN (sets of trajectories)가 성능이 제일 안 좋음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;이는 RL objective로 사용된 sample들을 decorrelating하는 것이 중요함을 보여줌&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0sJGQ/btrutkpnwr4/GTuPqvwPr1BudLVozvX0pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0sJGQ/btrutkpnwr4/GTuPqvwPr1BudLVozvX0pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0sJGQ/btrutkpnwr4/GTuPqvwPr1BudLVozvX0pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0sJGQ%2Fbtrutkpnwr4%2FGTuPqvwPr1BudLVozvX0pk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;397&quot; height=&quot;276&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Data sampling strategies&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;PEARL은 sampler Sc가 최근 수집된 data에서 sampling하고 off-policy를 위한 data와 분리됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;비교 실험 두 번째 방법은 최근 수집된 것을 고려하지 않고 off-policy와 분리되지만 entire replaybuffer에서 sampling하는 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;비교 실험 세 번째 방법은 off-policy RL batch와 같은 data를 사용하는 방법 (off-policy RL-batch)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;세 번째 방법이 두 번째 방법보다 나은 성능을 보였는데, 이는 둘 사이의 correlation이 학습을 쉽게 만들었을 것이라 판단됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/29uuz/btruQltbQdb/YGFuB7Futb292SnMrha4Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/29uuz/btruQltbQdb/YGFuB7Futb292SnMrha4Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/29uuz/btruQltbQdb/YGFuB7Futb292SnMrha4Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F29uuz%2FbtruQltbQdb%2FYGFuB7Futb292SnMrha4Nk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;431&quot; height=&quot;291&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Deterministic context&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;encoder를 거쳐 나온 output이 distribution을 따르지 않고, deterministic 한 경우와 비교&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;latent context variable의 stochasticity가 없으므로, 유일한 확률성은 policy에서 나오고 이는 시간 불변성함으로 exploration을 방해함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;817&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k8BP0/btruITkFtpm/8xyGDe0IGnK3Kia30xXjpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k8BP0/btruITkFtpm/8xyGDe0IGnK3Kia30xXjpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k8BP0/btruITkFtpm/8xyGDe0IGnK3Kia30xXjpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk8BP0%2FbtruITkFtpm%2F8xyGDe0IGnK3Kia30xXjpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;415&quot; height=&quot;297&quot; data-origin-width=&quot;1141&quot; data-origin-height=&quot;817&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;7. Conclusion&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;task를 추론하는 것과 푸는 것을 나누어 train과 test 사이의 distribution mismatch를 minimize함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;이러한 접근은 off-policy RL 알고리즘에 있어서 매우 의미있는 접근임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Context를 확률적으로 모델링하면 test 과정에서 exploration을 위한 posterior sampling이 가능함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;이는 일시적으로 adaptation efficiency를 향상시키는 exploration을 가능하게 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Paper Review</category>
      <category>MAML</category>
      <category>MetaLearning</category>
      <category>Paper</category>
      <category>Pearl</category>
      <category>ReinforcementLearning</category>
      <category>RL</category>
      <category>강화학습</category>
      <category>논문</category>
      <category>논문리뷰</category>
      <category>메타러닝</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/30</guid>
      <comments>https://bunnycode.tistory.com/30#entry30comment</comments>
      <pubDate>Mon, 28 Feb 2022 18:52:46 +0900</pubDate>
    </item>
    <item>
      <title>[ROS TUTORIAL] - 2. 기본 명령어</title>
      <link>https://bunnycode.tistory.com/29</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;1134&quot; data-filename=&quot;썸네일_ROS_2.PNG&quot; width=&quot;360&quot; height=&quot;360&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r2vCu/btrhFRF5sXA/ol56DkLH692JLPgmLTTCo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r2vCu/btrhFRF5sXA/ol56DkLH692JLPgmLTTCo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r2vCu/btrhFRF5sXA/ol56DkLH692JLPgmLTTCo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr2vCu%2FbtrhFRF5sXA%2Fol56DkLH692JLPgmLTTCo0%2Fimg.png&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;1134&quot; data-filename=&quot;썸네일_ROS_2.PNG&quot; width=&quot;360&quot; height=&quot;360&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;roscd : 지정한 ROS 패키지의 디렉터리로 이동&lt;/li&gt;
&lt;li&gt;roscore : 마스터, 로그 기록, 파라미터 관리 등&lt;/li&gt;
&lt;li&gt;rosrun : 노드 실행&lt;/li&gt;
&lt;li&gt;roslaunch : 노드를 여러 개 실행 및 실행 옵션 설정&lt;/li&gt;
&lt;li&gt;rosclean : ROS 로그 파일을 검사하거나 삭제&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;rostopic : 토픽 정보 확인&lt;/li&gt;
&lt;li&gt;rosservice : 서비스 정보 확인&lt;/li&gt;
&lt;li&gt;rosnode : 노드 정보 확인&lt;/li&gt;
&lt;li&gt;rosparam : 파라미터 정보 확인, 수정&lt;/li&gt;
&lt;li&gt;rosbag : 메시지 기록, 재생&lt;/li&gt;
&lt;li&gt;rosmsg : 메시지 정보 확인&lt;/li&gt;
&lt;li&gt;rossrv : 서비스 정보 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;catkin_create_pkg : 패키지 자동 생성&lt;/li&gt;
&lt;li&gt;catkin_make : 캐킨 빌드 시스템에 기반을 둔 빌드&lt;/li&gt;
&lt;li&gt;catkin_eclipse : 캐킨 빌드 시스템으로 생성한 패키지를 이클립스에서 사용할 수 있게 변경&lt;/li&gt;
&lt;li&gt;catkin_prepare_release : 릴리즈할 때 사용되는 로그 정리 및 버전 태깅&lt;/li&gt;
&lt;li&gt;catkin_generate_changelog : 릴리즈할 때 CHANGELOG.rst 파일 생성 또는 업데이트&lt;/li&gt;
&lt;li&gt;catkin_init_workspace : 캐킨 빌드 시스템의 작업 폴더 초기화&lt;/li&gt;
&lt;li&gt;catkin_find : 캐킨 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;rospack : ROS 패키지와 관련된 정보 보기&lt;/li&gt;
&lt;li&gt;rosinstall : ROS 추가 패키지 설치&lt;/li&gt;
&lt;li&gt;rosdep : 해당 패키지의 의존성 파일 설치&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.ros.org/Tools&quot;&gt;https://wiki.ros.org/Tools&lt;/a&gt; 참조하면 좋음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료 출처 표시 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bunnycode.tistory.com/26&quot;&gt;https://bunnycode.tistory.com/26&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1634136116215&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[ROS TUTORIAL] - 0. Intro&quot; data-og-description=&quot;안녕하세요!! 버즈밴드입니다. 이번 카테고리는 ROS에 관한 글들을 작성해보려고 합니다. Python, C, C++과 다르게 ROS는 인터넷을 찾아봐도 한글 자료들이 많이 없어 혼자 공부하기 꽤나 힘들었습니&quot; data-og-host=&quot;bunnycode.tistory.com&quot; data-og-source-url=&quot;https://bunnycode.tistory.com/26&quot; data-og-url=&quot;https://bunnycode.tistory.com/26&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bo55Sc/hyLXDpN4D7/HWgn2CtXBTPpJ1s0MKNWG1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6Bm7V/hyLVQj2ePG/nbsgkwv76fvHAK7m7UZTh1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/goLjM/hyLXqjHy3O/HEcSneaRj9sQ1kVDAOfcO0/img.jpg?width=682&amp;amp;height=682&amp;amp;face=0_0_682_682&quot;&gt;&lt;a href=&quot;https://bunnycode.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bunnycode.tistory.com/26&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bo55Sc/hyLXDpN4D7/HWgn2CtXBTPpJ1s0MKNWG1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6Bm7V/hyLVQj2ePG/nbsgkwv76fvHAK7m7UZTh1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/goLjM/hyLXqjHy3O/HEcSneaRj9sQ1kVDAOfcO0/img.jpg?width=682&amp;amp;height=682&amp;amp;face=0_0_682_682');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[ROS TUTORIAL] - 0. Intro&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요!! 버즈밴드입니다. 이번 카테고리는 ROS에 관한 글들을 작성해보려고 합니다. Python, C, C++과 다르게 ROS는 인터넷을 찾아봐도 한글 자료들이 많이 없어 혼자 공부하기 꽤나 힘들었습니&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bunnycode.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ROS</category>
      <category>Ros</category>
      <category>공부</category>
      <category>기본명령어</category>
      <category>독학</category>
      <category>로봇운영체제</category>
      <category>로스</category>
      <category>명령어</category>
      <category>컴퓨터</category>
      <category>프로그래밍</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/29</guid>
      <comments>https://bunnycode.tistory.com/29#entry29comment</comments>
      <pubDate>Wed, 13 Oct 2021 23:38:08 +0900</pubDate>
    </item>
    <item>
      <title>[ROS TUTORIAL] - 1. 기본 용어</title>
      <link>https://bunnycode.tistory.com/28</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;1134&quot; data-filename=&quot;슬라이드1.PNG&quot; width=&quot;384&quot; height=&quot;384&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpjWwP/btrhA1QA5Mi/Kkvmpxsk4ZygWtEZImJS5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpjWwP/btrhA1QA5Mi/Kkvmpxsk4ZygWtEZImJS5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpjWwP/btrhA1QA5Mi/Kkvmpxsk4ZygWtEZImJS5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpjWwP%2FbtrhA1QA5Mi%2FKkvmpxsk4ZygWtEZImJS5k%2Fimg.png&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;1134&quot; data-filename=&quot;슬라이드1.PNG&quot; width=&quot;384&quot; height=&quot;384&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Node&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 최소 단위의 실행 가능 프로세서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; ROS에서 Node 단위로 프로그램을 나누어 작업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 각 Node는 메시지 통신으로 데이터를 주고 받음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Package&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 위의 노드 혹은 노드 실행을 위한 정보 등을 묶어 놓은 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 패키지의 묶음을 메타패키지라고도 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Message&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 노드간의 데이터를 주고받을 때 사용하는 수단&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 메시지는 integer, floating point, boolean 와 같은 변수형태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 메시지 안의 메시지를 품고 있는 배열과 같은 구조도 사용 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Topic&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 단방향의 메시지 통신 방법(연속성을 가짐) (ex, 센서 데이터)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 보내는 애 : Publisher, 받는 애 : Subscriber&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 1:N, N:1, N:N 도 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 대부분의 메시지에 Topic 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;444&quot; data-filename=&quot;Untitled.png&quot; width=&quot;332&quot; height=&quot;230&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cys8rM/btrhFujQO6K/Wyi0m3VXlVhJfvpi4iGGnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cys8rM/btrhFujQO6K/Wyi0m3VXlVhJfvpi4iGGnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cys8rM/btrhFujQO6K/Wyi0m3VXlVhJfvpi4iGGnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcys8rM%2FbtrhFujQO6K%2FWyi0m3VXlVhJfvpi4iGGnk%2Fimg.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;444&quot; data-filename=&quot;Untitled.png&quot; width=&quot;332&quot; height=&quot;230&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Service&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 양방향의 메시지 통신 방법(1회성)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 요청하는 애 : Client 수행하는 애 : Server&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;482&quot; data-filename=&quot;Untitled 1.png&quot; width=&quot;208&quot; height=&quot;292&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0bkAc/btrhzSzdqeu/QfKuKcuYW2WqPgCA0GZTAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0bkAc/btrhzSzdqeu/QfKuKcuYW2WqPgCA0GZTAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0bkAc/btrhzSzdqeu/QfKuKcuYW2WqPgCA0GZTAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0bkAc%2FbtrhzSzdqeu%2FQfKuKcuYW2WqPgCA0GZTAK%2Fimg.png&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;482&quot; data-filename=&quot;Untitled 1.png&quot; width=&quot;208&quot; height=&quot;292&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Action&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 양방향의 메시지 통신 방법인데, 중간에 피드백 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 장시간 혹은 복잡한 task에 사용됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;528&quot; data-filename=&quot;Untitled 2.png&quot; width=&quot;191&quot; height=&quot;399&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DsQf3/btrhFR63fcP/ROfa8bPDZTaHpbthMdBWA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DsQf3/btrhFR63fcP/ROfa8bPDZTaHpbthMdBWA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DsQf3/btrhFR63fcP/ROfa8bPDZTaHpbthMdBWA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDsQf3%2FbtrhFR63fcP%2FROfa8bPDZTaHpbthMdBWA1%2Fimg.png&quot; data-origin-width=&quot;253&quot; data-origin-height=&quot;528&quot; data-filename=&quot;Untitled 2.png&quot; width=&quot;191&quot; height=&quot;399&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Message 통신 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;410&quot; data-filename=&quot;Untitled 3.png&quot; width=&quot;368&quot; height=&quot;223&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBUkKM/btrhH6vifoA/hjrgyTd19T40zen4fK2mGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBUkKM/btrhH6vifoA/hjrgyTd19T40zen4fK2mGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBUkKM/btrhH6vifoA/hjrgyTd19T40zen4fK2mGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBUkKM%2FbtrhH6vifoA%2FhjrgyTd19T40zen4fK2mGk%2Fimg.png&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;410&quot; data-filename=&quot;Untitled 3.png&quot; width=&quot;368&quot; height=&quot;223&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 마스터 구동&lt;/p&gt;
&lt;pre id=&quot;code_1634124837781&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;roscore&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;400&quot; data-filename=&quot;Untitled 4.png&quot; width=&quot;504&quot; height=&quot;298&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbQyKs/btrhGarHIwi/b68d2xByg2DtbDgIFwn8G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbQyKs/btrhGarHIwi/b68d2xByg2DtbDgIFwn8G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbQyKs/btrhGarHIwi/b68d2xByg2DtbDgIFwn8G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbQyKs%2FbtrhGarHIwi%2Fb68d2xByg2DtbDgIFwn8G0%2Fimg.png&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;400&quot; data-filename=&quot;Untitled 4.png&quot; width=&quot;504&quot; height=&quot;298&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 서브스크라이버 노드 구동&lt;/p&gt;
&lt;pre id=&quot;code_1634124892753&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rosrun 패키지이름 노드이름

# 노드 정보
/subscriber_node_name,
/topic_name,
message type,
http://ROS_HOSTNAME:1234&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;398&quot; data-filename=&quot;Untitled 5.png&quot; width=&quot;520&quot; height=&quot;307&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H77wU/btrhFQG1CC2/XizeWENYApAWiXYVw1LFg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H77wU/btrhFQG1CC2/XizeWENYApAWiXYVw1LFg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H77wU/btrhFQG1CC2/XizeWENYApAWiXYVw1LFg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH77wU%2FbtrhFQG1CC2%2FXizeWENYApAWiXYVw1LFg1%2Fimg.png&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;398&quot; data-filename=&quot;Untitled 5.png&quot; width=&quot;520&quot; height=&quot;307&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 퍼블리셔 노드 구동&lt;/p&gt;
&lt;pre id=&quot;code_1634124930510&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rosrun 패키지이름 노드이름

# 노드 정보
/publisher_node_name,
/topic_name,
message type,
http://ROS_HOSTNAME:5678&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;396&quot; data-filename=&quot;Untitled 6.png&quot; width=&quot;562&quot; height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NhwEs/btrhGTJ1l88/02DeLYAvKzKio6KQc9UtFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NhwEs/btrhGTJ1l88/02DeLYAvKzKio6KQc9UtFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NhwEs/btrhGTJ1l88/02DeLYAvKzKio6KQc9UtFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNhwEs%2FbtrhGTJ1l88%2F02DeLYAvKzKio6KQc9UtFK%2Fimg.png&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;396&quot; data-filename=&quot;Untitled 6.png&quot; width=&quot;562&quot; height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 퍼블리셔 정보 알림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 마스터 노드가 서브스크라이버 노드에게 퍼블리셔 정보 알림&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;432&quot; data-filename=&quot;Untitled 7.png&quot; width=&quot;559&quot; height=&quot;326&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oyxv5/btrhF90Eo8C/M4IZ3i4cTk6rvDA5JL7hg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oyxv5/btrhF90Eo8C/M4IZ3i4cTk6rvDA5JL7hg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oyxv5/btrhF90Eo8C/M4IZ3i4cTk6rvDA5JL7hg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foyxv5%2FbtrhF90Eo8C%2FM4IZ3i4cTk6rvDA5JL7hg1%2Fimg.png&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;432&quot; data-filename=&quot;Untitled 7.png&quot; width=&quot;559&quot; height=&quot;326&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 퍼블리셔 노드에 접속 요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 마스터에게 받은 퍼블리셔 정보를 이용하여 TCPROS 접속 요청&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;434&quot; data-filename=&quot;Untitled 8.png&quot; width=&quot;568&quot; height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0HWsp/btrhH69Wrs2/jH0CgxilmHtmR47fLkgbek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0HWsp/btrhH69Wrs2/jH0CgxilmHtmR47fLkgbek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0HWsp/btrhH69Wrs2/jH0CgxilmHtmR47fLkgbek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0HWsp%2FbtrhH69Wrs2%2FjH0CgxilmHtmR47fLkgbek%2Fimg.png&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;434&quot; data-filename=&quot;Untitled 8.png&quot; width=&quot;568&quot; height=&quot;331&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 서브스크라이버 노드에 접속 응답&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;424&quot; data-filename=&quot;Untitled 9.png&quot; width=&quot;570&quot; height=&quot;328&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s1tK3/btrhGbYsbjX/KHCJsFXT0jL8l7z0MKgoy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s1tK3/btrhGbYsbjX/KHCJsFXT0jL8l7z0MKgoy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s1tK3/btrhGbYsbjX/KHCJsFXT0jL8l7z0MKgoy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs1tK3%2FbtrhGbYsbjX%2FKHCJsFXT0jL8l7z0MKgoy1%2Fimg.png&quot; data-origin-width=&quot;738&quot; data-origin-height=&quot;424&quot; data-filename=&quot;Untitled 9.png&quot; width=&quot;570&quot; height=&quot;328&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. TCP 접속 &amp;amp; 메시지 전송&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;434&quot; data-filename=&quot;Untitled 10.png&quot; width=&quot;557&quot; height=&quot;328&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brTpog/btrhFQNMysf/v3Xtwqz4cQKsHFTRpgYoy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brTpog/btrhFQNMysf/v3Xtwqz4cQKsHFTRpgYoy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brTpog/btrhFQNMysf/v3Xtwqz4cQKsHFTRpgYoy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrTpog%2FbtrhFQNMysf%2Fv3Xtwqz4cQKsHFTRpgYoy1%2Fimg.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;434&quot; data-filename=&quot;Untitled 10.png&quot; width=&quot;557&quot; height=&quot;328&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실습해보기!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 먼저 Turtlesim 패키지 설치하기&lt;/p&gt;
&lt;pre id=&quot;code_1634125183903&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install ros-melodic-turtlesim&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 마스터 노드 설정&lt;/p&gt;
&lt;pre id=&quot;code_1634125196945&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;roscore&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 마스터 노드는 항상 실행된 상태이어야 하므로 터미널을 닫으면 안됨!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 새로운 터미널을 열어 다른 노드들 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 서브스크라이버 노드 실행&lt;/p&gt;
&lt;pre id=&quot;code_1634125216437&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rosrun turtlesim turtlesim_node&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;1162&quot; data-filename=&quot;Untitled 11.png&quot; width=&quot;548&quot; height=&quot;579&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkV2hF/btrhFx11c9Z/LTThAg5DkvQ7SHeL4yqAm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkV2hF/btrhFx11c9Z/LTThAg5DkvQ7SHeL4yqAm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkV2hF/btrhFx11c9Z/LTThAg5DkvQ7SHeL4yqAm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkV2hF%2FbtrhFx11c9Z%2FLTThAg5DkvQ7SHeL4yqAm0%2Fimg.png&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;1162&quot; data-filename=&quot;Untitled 11.png&quot; width=&quot;548&quot; height=&quot;579&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 위의 사진처럼 입력해주면 다음과 같은 창이 뜸&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;930&quot; data-filename=&quot;Untitled 12.png&quot; width=&quot;561&quot; height=&quot;596&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cs2NOI/btrhGTcbf6U/bUJ2UNp4pUScxGpf5cm2l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cs2NOI/btrhGTcbf6U/bUJ2UNp4pUScxGpf5cm2l1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cs2NOI/btrhGTcbf6U/bUJ2UNp4pUScxGpf5cm2l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcs2NOI%2FbtrhGTcbf6U%2FbUJ2UNp4pUScxGpf5cm2l1%2Fimg.png&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;930&quot; data-filename=&quot;Untitled 12.png&quot; width=&quot;561&quot; height=&quot;596&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 퍼블리셔 노드 실행&lt;/p&gt;
&lt;pre id=&quot;code_1634125270493&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rosrun turtlesim turtle_teleop_key&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 마찬가지로 새로운 터미널을 오픈하고 실행해야함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;2068&quot; data-origin-height=&quot;930&quot; data-filename=&quot;Untitled 13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBXM9o/btrhGSxyQMN/olcYykgfYqIAOkk6CfUIi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBXM9o/btrhGSxyQMN/olcYykgfYqIAOkk6CfUIi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBXM9o/btrhGSxyQMN/olcYykgfYqIAOkk6CfUIi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBXM9o%2FbtrhGSxyQMN%2FolcYykgfYqIAOkk6CfUIi1%2Fimg.png&quot; data-origin-width=&quot;2068&quot; data-origin-height=&quot;930&quot; data-filename=&quot;Untitled 13.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 위와 같이 키를 움직이면서 turtle을 움직일 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 이 때 방향키 입력을 퍼블리셔 노드를 실행시킨 터미널 창에서 해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(정보를 발행시키는 창이니까 당연하기도 한데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 몰라서 처음에 turtlesim 실행창에 함...ㅠㅠ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 노드 간 관계 표현 가능&lt;/p&gt;
&lt;pre id=&quot;code_1634125320365&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rqt_graph&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 당연히 마찬가지로 새로운 터미널 창을 열고 입력해야함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;448&quot; data-filename=&quot;Untitled 14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pdZ90/btrhInRkvCS/3buiXnqcZl4jRAjeXulBk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pdZ90/btrhInRkvCS/3buiXnqcZl4jRAjeXulBk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pdZ90/btrhInRkvCS/3buiXnqcZl4jRAjeXulBk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpdZ90%2FbtrhInRkvCS%2F3buiXnqcZl4jRAjeXulBk1%2Fimg.png&quot; data-origin-width=&quot;1030&quot; data-origin-height=&quot;448&quot; data-filename=&quot;Untitled 14.png&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 마스터와 서브스크라이버, 퍼블리셔 노드 관계를 표현하면 다음과 같음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;538&quot; data-filename=&quot;Untitled 15.png&quot; width=&quot;605&quot; height=&quot;396&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNRirz/btrhHuJVXfr/JXJFqjS4Ntb0cPaQsM3YCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNRirz/btrhHuJVXfr/JXJFqjS4Ntb0cPaQsM3YCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNRirz/btrhHuJVXfr/JXJFqjS4Ntb0cPaQsM3YCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNRirz%2FbtrhHuJVXfr%2FJXJFqjS4Ntb0cPaQsM3YCK%2Fimg.png&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;538&quot; data-filename=&quot;Untitled 15.png&quot; width=&quot;605&quot; height=&quot;396&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 위의 경우 twist message 형태&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;752&quot; data-filename=&quot;Untitled 16.png&quot; width=&quot;617&quot; height=&quot;390&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duC10F/btrhHpWdnx1/AfWZXIqEfwYYlcEyQqdC10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duC10F/btrhHpWdnx1/AfWZXIqEfwYYlcEyQqdC10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duC10F/btrhHpWdnx1/AfWZXIqEfwYYlcEyQqdC10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduC10F%2FbtrhHpWdnx1%2FAfWZXIqEfwYYlcEyQqdC10%2Fimg.png&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;752&quot; data-filename=&quot;Untitled 16.png&quot; width=&quot;617&quot; height=&quot;390&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROS 메시지 자세히 살펴보려면!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; &lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;http://wiki.ros.org/msg&quot;&gt;http://wiki.ros.org/msg&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1634125448875&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;msg - ROS Wiki&quot; data-og-description=&quot;ROS uses a simplified messages description language for describing the data values (aka messages) that ROS nodes publish. This description makes it easy for ROS tools to automatically generate source code for the message type in several target languages. M&quot; data-og-host=&quot;wiki.ros.org&quot; data-og-source-url=&quot;http://wiki.ros.org/msg&quot; data-og-url=&quot;http://wiki.ros.org/msg&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://wiki.ros.org/msg&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://wiki.ros.org/msg&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;msg - ROS Wiki&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ROS uses a simplified messages description language for describing the data values (aka messages) that ROS nodes publish. This description makes it easy for ROS tools to automatically generate source code for the message type in several target languages. M&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wiki.ros.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네임(Names)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 노드, 메시지가 가지는 고유의 식별자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 같은 네임의 노드 실행 불가 &amp;rArr; 바꾸고 실행해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료 출처 표시 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bunnycode.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bunnycode.tistory.com/26&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1634125680593&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[ROS TUTORIAL] - 0. Intro&quot; data-og-description=&quot;안녕하세요!! 버즈밴드입니다. 이번 카테고리는 ROS에 관한 글들을 작성해보려고 합니다. Python, C, C++과 다르게 ROS는 인터넷을 찾아봐도 한글 자료들이 많이 없어 혼자 공부하기 꽤나 힘들었습니&quot; data-og-host=&quot;bunnycode.tistory.com&quot; data-og-source-url=&quot;https://bunnycode.tistory.com/26&quot; data-og-url=&quot;https://bunnycode.tistory.com/26&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bo55Sc/hyLXDpN4D7/HWgn2CtXBTPpJ1s0MKNWG1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6Bm7V/hyLVQj2ePG/nbsgkwv76fvHAK7m7UZTh1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/goLjM/hyLXqjHy3O/HEcSneaRj9sQ1kVDAOfcO0/img.jpg?width=682&amp;amp;height=682&amp;amp;face=0_0_682_682&quot;&gt;&lt;a href=&quot;https://bunnycode.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bunnycode.tistory.com/26&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bo55Sc/hyLXDpN4D7/HWgn2CtXBTPpJ1s0MKNWG1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6Bm7V/hyLVQj2ePG/nbsgkwv76fvHAK7m7UZTh1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/goLjM/hyLXqjHy3O/HEcSneaRj9sQ1kVDAOfcO0/img.jpg?width=682&amp;amp;height=682&amp;amp;face=0_0_682_682');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[ROS TUTORIAL] - 0. Intro&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요!! 버즈밴드입니다. 이번 카테고리는 ROS에 관한 글들을 작성해보려고 합니다. Python, C, C++과 다르게 ROS는 인터넷을 찾아봐도 한글 자료들이 많이 없어 혼자 공부하기 꽤나 힘들었습니&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bunnycode.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ROS</category>
      <category>node</category>
      <category>Ros</category>
      <category>로봇운영체제</category>
      <category>로스</category>
      <category>컴퓨터</category>
      <category>컴퓨터프로그래밍</category>
      <category>터틀심</category>
      <category>프로그래밍</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/28</guid>
      <comments>https://bunnycode.tistory.com/28#entry28comment</comments>
      <pubDate>Wed, 13 Oct 2021 20:49:56 +0900</pubDate>
    </item>
    <item>
      <title>[ROS TUTORIAL] - 0. Intro</title>
      <link>https://bunnycode.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요!! 버즈밴드입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 카테고리는 ROS에 관한 글들을 작성해보려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Python, C, C++과 다르게 ROS는 인터넷을 찾아봐도 한글 자료들이 많이 없어 혼자 공부하기 꽤나 힘들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 오로카(네이버 오픈소스로봇카페)를 비롯해 많은 분들이 정리해두신 자료들이 정말 많은 도움이 되었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 여러 분들이 개별적으로 작성하신 것들이라 공부할 때 통일성을 찾아가며 순서대로 공부하기 힘들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그래서 공부할 때 처음 ROS 접하신 분들이 따라오기 쉽도록 총 18편의 튜토리얼을 새로 작성했고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이에 대한 게시물들을 먼저 올릴 생각입니다!!&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 도움이 되길 바라며, 사용하는 ROS 버전과 자료들의 출처는 다음과 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다!!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROS version : ros1-melodic (noetic도 가능하지만 약간 상이할 수 있음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료 출처 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://cafe.naver.com/openrt?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D25572101%2526articleid%3D25329&quot;&gt;https://cafe.naver.com/openrt?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D25572101%2526articleid%3D25329&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1633860461995&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;오픈소스 소프트웨어 &amp;amp; 하드웨어: 로... : 네이버 카페&quot; data-og-description=&quot;오픈소스 소프트웨어/하드웨어로 만드는 로봇 기술 공유 카페 (ROS,ARM,AVR,mbed,라즈베리파이,아두이노)&quot; data-og-host=&quot;cafe.naver.com&quot; data-og-source-url=&quot;https://cafe.naver.com/openrt?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D25572101%2526articleid%3D25329&quot; data-og-url=&quot;https://cafe.naver.com/openrt&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cGS2la/hyLUkxiYAS/KUbB1NlM6VseWbEkxhJ6wK/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150&quot;&gt;&lt;a href=&quot;https://cafe.naver.com/openrt?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D25572101%2526articleid%3D25329&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cafe.naver.com/openrt?iframe_url_utf8=%2FArticleRead.nhn%253Fclubid%3D25572101%2526articleid%3D25329&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cGS2la/hyLUkxiYAS/KUbB1NlM6VseWbEkxhJ6wK/img.png?width=150&amp;amp;height=150&amp;amp;face=0_0_150_150');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;오픈소스 소프트웨어 &amp;amp; 하드웨어: 로... : 네이버 카페&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오픈소스 소프트웨어/하드웨어로 만드는 로봇 기술 공유 카페 (ROS,ARM,AVR,mbed,라즈베리파이,아두이노)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cafe.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.notion.so/byeongkyu/ROS-73000a9914684ac89ed8a835c6963b5e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.notion.so/byeongkyu/ROS-73000a9914684ac89ed8a835c6963b5e&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1633860545661&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ROS 로봇 프로그래밍&quot; data-og-description=&quot;ROS1 (Robot Operating System)에 대한 전반적인 이해 및 다양한 도구 활용 방법 습득 실제 로봇 모델링 및 시뮬레이션 Navigation, MoveIt! 등 로봇 제어를 위한 프레임웍 실습&quot; data-og-host=&quot;www.notion.so&quot; data-og-source-url=&quot;https://www.notion.so/byeongkyu/ROS-73000a9914684ac89ed8a835c6963b5e&quot; data-og-url=&quot;https://www.notion.so/73000a9914684ac89ed8a835c6963b5e&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ACOeY/hyLUlpshTI/1ZTmrkIEl6bgNkEePC0uKk/img.jpg?width=1500&amp;amp;height=1500&amp;amp;face=0_0_1500_1500,https://scrap.kakaocdn.net/dn/Jbk3v/hyLUtHK5zN/dvDKThsjJxI70YXHCMkQkK/img.jpg?width=1500&amp;amp;height=1500&amp;amp;face=0_0_1500_1500&quot;&gt;&lt;a href=&quot;https://www.notion.so/byeongkyu/ROS-73000a9914684ac89ed8a835c6963b5e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/byeongkyu/ROS-73000a9914684ac89ed8a835c6963b5e&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ACOeY/hyLUlpshTI/1ZTmrkIEl6bgNkEePC0uKk/img.jpg?width=1500&amp;amp;height=1500&amp;amp;face=0_0_1500_1500,https://scrap.kakaocdn.net/dn/Jbk3v/hyLUtHK5zN/dvDKThsjJxI70YXHCMkQkK/img.jpg?width=1500&amp;amp;height=1500&amp;amp;face=0_0_1500_1500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ROS 로봇 프로그래밍&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;ROS1 (Robot Operating System)에 대한 전반적인 이해 및 다양한 도구 활용 방법 습득 실제 로봇 모델링 및 시뮬레이션 Navigation, MoveIt! 등 로봇 제어를 위한 프레임웍 실습&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.notion.so&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&quot;&gt;https://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1633860615853&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;ROS Courses (한국어)&quot; data-og-description=&quot;https://github.com/robotpilot/ros-seminar&quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&quot; data-og-url=&quot;http://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Dclcy/hyLUpk23TQ/qWXxZFf6ts9t3a8wj3w2p1/img.jpg?width=168&amp;amp;height=94&amp;amp;face=0_0_168_94,https://scrap.kakaocdn.net/dn/beqcUJ/hyLUus9f5h/KUZVg4UkuBknBXkODYuBDK/img.jpg?width=196&amp;amp;height=110&amp;amp;face=0_0_196_110,https://scrap.kakaocdn.net/dn/eaPjlI/hyLUnU5TxG/GQ4PCfqhfUkeVVKJyTkJJ1/img.jpg?width=246&amp;amp;height=138&amp;amp;face=0_0_246_138,https://scrap.kakaocdn.net/dn/EcGQF/hyLUq5mFTg/UgS9LKdWXKZMr1x24yfb5k/img.jpg?width=336&amp;amp;height=188&amp;amp;face=0_0_336_188&quot;&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/playlist?list=PLRG6WP3c31_VIFtFAxSke2NG_DumVZPgw&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Dclcy/hyLUpk23TQ/qWXxZFf6ts9t3a8wj3w2p1/img.jpg?width=168&amp;amp;height=94&amp;amp;face=0_0_168_94,https://scrap.kakaocdn.net/dn/beqcUJ/hyLUus9f5h/KUZVg4UkuBknBXkODYuBDK/img.jpg?width=196&amp;amp;height=110&amp;amp;face=0_0_196_110,https://scrap.kakaocdn.net/dn/eaPjlI/hyLUnU5TxG/GQ4PCfqhfUkeVVKJyTkJJ1/img.jpg?width=246&amp;amp;height=138&amp;amp;face=0_0_246_138,https://scrap.kakaocdn.net/dn/EcGQF/hyLUq5mFTg/UgS9LKdWXKZMr1x24yfb5k/img.jpg?width=336&amp;amp;height=188&amp;amp;face=0_0_336_188');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ROS Courses (한국어)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;https://github.com/robotpilot/ros-seminar&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pinkwink.kr/category/Robot/Robot%20Program%20-%20ROS?&quot;&gt;https://pinkwink.kr/category/Robot/Robot%20Program%20-%20ROS?&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1633860628626&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;'Robot/Robot Program - ROS' 카테고리의 글 목록&quot; data-og-description=&quot;한 변두리 공학도의 블로그입니다. 재미있어 보이는 것들을 모두 기초스럽게 접근하는 블로그이며... 그보다 더욱 소중한 우리 아가 미바뤼의 발자취를 남겨두는 블로그이기도 합니다.&quot; data-og-host=&quot;pinkwink.kr&quot; data-og-source-url=&quot;https://pinkwink.kr/category/Robot/Robot%20Program%20-%20ROS?&quot; data-og-url=&quot;https://pinkwink.kr/category/Robot/Robot%20Program%20-%20ROS?&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/MRLKy/hyLUqdcf5q/ElkbnhMQzMHo6YRMDnEsQK/img.jpg?width=213&amp;amp;height=165&amp;amp;face=0_0_213_165,https://scrap.kakaocdn.net/dn/bkscD0/hyLUfW4v68/kkCehCdiEa6IIfg2ArYGD1/img.jpg?width=213&amp;amp;height=165&amp;amp;face=0_0_213_165,https://scrap.kakaocdn.net/dn/beHqBc/hyLUqxwlTG/w9LD4aEjpNdxS3huAubxQ1/img.jpg?width=750&amp;amp;height=440&amp;amp;face=0_0_750_440&quot;&gt;&lt;a href=&quot;https://pinkwink.kr/category/Robot/Robot%20Program%20-%20ROS?&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pinkwink.kr/category/Robot/Robot%20Program%20-%20ROS?&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/MRLKy/hyLUqdcf5q/ElkbnhMQzMHo6YRMDnEsQK/img.jpg?width=213&amp;amp;height=165&amp;amp;face=0_0_213_165,https://scrap.kakaocdn.net/dn/bkscD0/hyLUfW4v68/kkCehCdiEa6IIfg2ArYGD1/img.jpg?width=213&amp;amp;height=165&amp;amp;face=0_0_213_165,https://scrap.kakaocdn.net/dn/beHqBc/hyLUqxwlTG/w9LD4aEjpNdxS3huAubxQ1/img.jpg?width=750&amp;amp;height=440&amp;amp;face=0_0_750_440');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;'Robot/Robot Program - ROS' 카테고리의 글 목록&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;한 변두리 공학도의 블로그입니다. 재미있어 보이는 것들을 모두 기초스럽게 접근하는 블로그이며... 그보다 더욱 소중한 우리 아가 미바뤼의 발자취를 남겨두는 블로그이기도 합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pinkwink.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ROS</category>
      <category>Ros</category>
      <category>rostutorial</category>
      <category>공부</category>
      <category>독학</category>
      <category>로봇</category>
      <category>로봇운영체제</category>
      <category>로스</category>
      <category>튜토리얼</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/26</guid>
      <comments>https://bunnycode.tistory.com/26#entry26comment</comments>
      <pubDate>Sun, 10 Oct 2021 19:16:09 +0900</pubDate>
    </item>
    <item>
      <title>[Python] - 23) 표준 모듈 불러오기</title>
      <link>https://bunnycode.tistory.com/25</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sI9tb/btqIAOI6boW/eGeQihPUy7SFx5Or1OXdgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sI9tb/btqIAOI6boW/eGeQihPUy7SFx5Or1OXdgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sI9tb/btqIAOI6boW/eGeQihPUy7SFx5Or1OXdgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsI9tb%2FbtqIAOI6boW%2FeGeQihPUy7SFx5Or1OXdgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;모듈에 대해 살펴볼게요! 모듈은 크게 '표준 모듈' 과 '외부 모듈' 로 나뉩니다. &lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;파이썬에 내장되어 있는 모듈을 표준 모듈, &lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;다른 사람들이 만들어 공개한 모듈을 외부 모듈이라 합니다.&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;먼저 표준 모듈을 불러오는 방법을 살펴볼게요. &lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;import &amp;lt;모듈 이름&amp;gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;을 통해 가져오거나&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;from &amp;lt;모듈&amp;gt; import &amp;lt;가져오고 싶은 것&amp;gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;을 통해 불러올 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;(이 때, &amp;lt;가져오고 싶은 것&amp;gt; 에 *를 사용하면 모든 변수 혹은 함수를 다 가져올 수 있습니다만, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;식별자 이름에서 원래 사용하던 것들과 충돌이 발생할 수 있으니 조심해야합니다.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위에서 발생할 수 있는 식별자 이름끼리의 충돌을 막고 싶거나 모듈의 이름이 너무 길어 짧게 줄여 사용하고 싶을 때는 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;as 구문을 이용하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;import &amp;lt;모듈&amp;gt; as &amp;lt;사용하고 싶은 식별자&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위의 구문을 통해 사용하고 싶은 식별자로 모듈을 불러올 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈에는 여러 모듈들이 있는데 모듈들이 어떠한 함수와 변수를 가지고 있는지는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 자동완성기능을 통해 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1MuO7/btqIrIpAYkV/TI5bKVFfaeOJpt5vkLeLs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1MuO7/btqIrIpAYkV/TI5bKVFfaeOJpt5vkLeLs1/img.png&quot; data-alt=&quot;자동완성기능으로 모듈의 함수와 변수 확인하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1MuO7/btqIrIpAYkV/TI5bKVFfaeOJpt5vkLeLs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1MuO7%2FbtqIrIpAYkV%2FTI5bKVFfaeOJpt5vkLeLs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자동완성기능으로 모듈의 함수와 변수 확인하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈에는 여러 종류들이 있는데 한 번에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;math, random, sys, os, datetime, time, urllib 모듈을 살펴볼게요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) math 모듈&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmBbHV/btqIhY8lwHt/ILCazWT47z6UWxTlwh3bC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmBbHV/btqIhY8lwHt/ILCazWT47z6UWxTlwh3bC0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmBbHV/btqIhY8lwHt/ILCazWT47z6UWxTlwh3bC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmBbHV%2FbtqIhY8lwHt%2FILCazWT47z6UWxTlwh3bC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Ntcn/btqInrhZ8nn/AVig3BJ7PTPa4OfjGVy4d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Ntcn/btqInrhZ8nn/AVig3BJ7PTPa4OfjGVy4d0/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Ntcn/btqInrhZ8nn/AVig3BJ7PTPa4OfjGVy4d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Ntcn%2FbtqInrhZ8nn%2FAVig3BJ7PTPa4OfjGVy4d0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) random 모듈&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/StMUS/btqIuL1c0t2/Sl8DVmkElmvx3SaorHZPj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/StMUS/btqIuL1c0t2/Sl8DVmkElmvx3SaorHZPj1/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/StMUS/btqIuL1c0t2/Sl8DVmkElmvx3SaorHZPj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FStMUS%2FbtqIuL1c0t2%2FSl8DVmkElmvx3SaorHZPj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWEV69/btqIwC3Kp6p/7RJcw4n9JW3xUM5Qpakck0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWEV69/btqIwC3Kp6p/7RJcw4n9JW3xUM5Qpakck0/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWEV69/btqIwC3Kp6p/7RJcw4n9JW3xUM5Qpakck0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWEV69%2FbtqIwC3Kp6p%2F7RJcw4n9JW3xUM5Qpakck0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) sys 모듈&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WlU3g/btqIuKVBT2W/0OzuhG8J0L7VftsA2uuP11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WlU3g/btqIuKVBT2W/0OzuhG8J0L7VftsA2uuP11/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WlU3g/btqIuKVBT2W/0OzuhG8J0L7VftsA2uuP11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWlU3g%2FbtqIuKVBT2W%2F0OzuhG8J0L7VftsA2uuP11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nhfHw/btqIxYZOj0m/K1nrXP2Mz3TfIqoIIPpwb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nhfHw/btqIxYZOj0m/K1nrXP2Mz3TfIqoIIPpwb0/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nhfHw/btqIxYZOj0m/K1nrXP2Mz3TfIqoIIPpwb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnhfHw%2FbtqIxYZOj0m%2FK1nrXP2Mz3TfIqoIIPpwb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) os 모듈&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqo4Zo/btqIvDV3D3n/87CgVkaqdYf0h6rgatTKi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqo4Zo/btqIvDV3D3n/87CgVkaqdYf0h6rgatTKi0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqo4Zo/btqIvDV3D3n/87CgVkaqdYf0h6rgatTKi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqo4Zo%2FbtqIvDV3D3n%2F87CgVkaqdYf0h6rgatTKi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0G6nM/btqIl9II4WL/CTAgSWL6cCAMTWuoDVcpKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0G6nM/btqIl9II4WL/CTAgSWL6cCAMTWuoDVcpKK/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0G6nM/btqIl9II4WL/CTAgSWL6cCAMTWuoDVcpKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0G6nM%2FbtqIl9II4WL%2FCTAgSWL6cCAMTWuoDVcpKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5) datetime 모듈&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GcY2I/btqIxZxy4hu/7iLZtwHeO9LMoB4BVuApCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GcY2I/btqIxZxy4hu/7iLZtwHeO9LMoB4BVuApCk/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GcY2I/btqIxZxy4hu/7iLZtwHeO9LMoB4BVuApCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGcY2I%2FbtqIxZxy4hu%2F7iLZtwHeO9LMoB4BVuApCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cREWWu/btqIl8Xj7Xq/grlfdDQgPSXZ2ozF8l9Wfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cREWWu/btqIl8Xj7Xq/grlfdDQgPSXZ2ozF8l9Wfk/img.png&quot; data-alt=&quot;코드 출력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cREWWu/btqIl8Xj7Xq/grlfdDQgPSXZ2ozF8l9Wfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcREWWu%2FbtqIl8Xj7Xq%2FgrlfdDQgPSXZ2ozF8l9Wfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 출력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6) time 모듈&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ve2io/btqIwZY2Rba/ok8pSuOO2c9Gvb1ygotH2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ve2io/btqIwZY2Rba/ok8pSuOO2c9Gvb1ygotH2K/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ve2io/btqIwZY2Rba/ok8pSuOO2c9Gvb1ygotH2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fve2io%2FbtqIwZY2Rba%2Fok8pSuOO2c9Gvb1ygotH2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxTJnI/btqInMGA2wk/6vStVia1oGYrl2thbJbEpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxTJnI/btqInMGA2wk/6vStVia1oGYrl2thbJbEpK/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxTJnI/btqInMGA2wk/6vStVia1oGYrl2thbJbEpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxTJnI%2FbtqInMGA2wk%2F6vStVia1oGYrl2thbJbEpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7) urllib 모듈&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zMryn/btqIqYAlu0z/buPFk10IfvDWTXs6dHWjt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zMryn/btqIqYAlu0z/buPFk10IfvDWTXs6dHWjt0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zMryn/btqIqYAlu0z/buPFk10IfvDWTXs6dHWjt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzMryn%2FbtqIqYAlu0z%2FbuPFk10IfvDWTXs6dHWjt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PYJxT/btqIwC3LasF/7leG1S1Q8DoOidRfHL0QKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PYJxT/btqIwC3LasF/7leG1S1Q8DoOidRfHL0QKk/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PYJxT/btqIwC3LasF/7leG1S1Q8DoOidRfHL0QKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPYJxT%2FbtqIwC3LasF%2F7leG1S1Q8DoOidRfHL0QKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 제가 사용한 코드들을 직접 입력해보면서 모듈이 무엇인지 익혀보면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별로 어렵지 않을거에요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 것들을 전부 외워야되나?? 그건 절대 아닙니다!!!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아 현재 시간을 구할때는 datetime 모듈을 사용했고, 랜덤으로 수를 뽑을 경우에는 random 모듈을 사용했구나.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이정도로만 기억하고 모듈의 함수들은 자동완성기능 혹은 검색으로 나오니까 세세히 외우기보다는 크게 크게&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모듈의 종류와 이름 그리고 쓰임새 정도만 기억해두면 좋을 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'Hello Coding 파이썬' 을 참고하여 작성하였음.&lt;/p&gt;</description>
      <category>Python Basic</category>
      <category>module</category>
      <category>독학</category>
      <category>모듈</category>
      <category>코딩</category>
      <category>파이썬</category>
      <category>표준모듈</category>
      <category>프로그래밍</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/25</guid>
      <comments>https://bunnycode.tistory.com/25#entry25comment</comments>
      <pubDate>Fri, 11 Sep 2020 16:04:25 +0900</pubDate>
    </item>
    <item>
      <title>[Python] - 22) 예외 객체, 예외 구분하기</title>
      <link>https://bunnycode.tistory.com/24</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bepTwq/btqHvKuvFZQ/vejGIqTjUo9HpXpRPXpb6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bepTwq/btqHvKuvFZQ/vejGIqTjUo9HpXpRPXpb6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bepTwq/btqHvKuvFZQ/vejGIqTjUo9HpXpRPXpb6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbepTwq%2FbtqHvKuvFZQ%2FvejGIqTjUo9HpXpRPXpb6k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;try except 구문으로 예외의 정보, 즉 '예외 객체'를 확인할 수 있습니다. &lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;try :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생할 가능성이 있는 구문&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;except &amp;lt;예외의 종류&amp;gt; as &amp;lt;예외 객체를 활용할 변수 이름&amp;gt; :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생했을 때 실행할 구문&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;바로 예시를 들어볼게요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eVEFis/btqHscyaiYD/KIunCZv6rRbZeyVkwKp330/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eVEFis/btqHscyaiYD/KIunCZv6rRbZeyVkwKp330/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eVEFis/btqHscyaiYD/KIunCZv6rRbZeyVkwKp330/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeVEFis%2FbtqHscyaiYD%2FKIunCZv6rRbZeyVkwKp330%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QiNtK/btqHq2CxMW6/Kn8gSJo0E8IvJUTk5Cbq61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QiNtK/btqHq2CxMW6/Kn8gSJo0E8IvJUTk5Cbq61/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QiNtK/btqHq2CxMW6/Kn8gSJo0E8IvJUTk5Cbq61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQiNtK%2FbtqHq2CxMW6%2FKn8gSJo0E8IvJUTk5Cbq61%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 실행된 코드 화면을 보면 정수를 입력함으로서 생기는 오류의 종류, 즉 '예외 객체의 자료형'은 'ValueError&quot; 라는 것을 알 수 있고,&lt;/p&gt;
&lt;p&gt;내용은 'invalid literal for int() with base 10 : '정수' 라는 것을 알 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그렇다면 위에서의 예외 객체를 사용해 예외를 구분해보도록 하겠습니다.&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예외 구분은 생기는 예외의 종류가 무엇인지 알고 싶을때 사용합니다.&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dD3gKO/btqHsb68z0b/PV24DJLUqEvE29TpRcMtF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dD3gKO/btqHsb68z0b/PV24DJLUqEvE29TpRcMtF0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dD3gKO/btqHsb68z0b/PV24DJLUqEvE29TpRcMtF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdD3gKO%2FbtqHsb68z0b%2FPV24DJLUqEvE29TpRcMtF0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 코드에 &lt;span style=&quot;color: #009a87;&quot;&gt;문자열을 입력하면 아래와 같은 오류가&lt;/span&gt;,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/327lL/btqHjqq2EOx/766XcKqhJf5oYwb9u5nVwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/327lL/btqHjqq2EOx/766XcKqhJf5oYwb9u5nVwK/img.png&quot; data-alt=&quot;문자열을 입력했을 때의 오류&amp;amp;amp;nbsp;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/327lL/btqHjqq2EOx/766XcKqhJf5oYwb9u5nVwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F327lL%2FbtqHjqq2EOx%2F766XcKqhJf5oYwb9u5nVwK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문자열을 입력했을 때의 오류&amp;nbsp;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;범위에서 &lt;span style=&quot;color: #009a87;&quot;&gt;벗어난 수를 입력하면 아래와 같은 오류가&lt;/span&gt; 나타납니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eVKZpF/btqHvJ3qiBh/KUS3DMjoYUV44xbx6OdYLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eVKZpF/btqHvJ3qiBh/KUS3DMjoYUV44xbx6OdYLk/img.png&quot; data-alt=&quot;범위에서 벗어난 수를 입력했을 때의 오류&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eVKZpF/btqHvJ3qiBh/KUS3DMjoYUV44xbx6OdYLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeVKZpF%2FbtqHvJ3qiBh%2FKUS3DMjoYUV44xbx6OdYLk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;범위에서 벗어난 수를 입력했을 때의 오류&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 두 가지 오류를 구분해서 처리하고 싶을 때 except 구문 뒤에 예외의 종류를 입력해서, 예외를 구분할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;try :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생할 가능성이 있는 구문&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;except &amp;lt;예외의 종류A&amp;gt; :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외A가 발생했을 때 실행할 구문&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;except &amp;lt;예외의 종류B&amp;gt; :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외B가 발생했을 때 실행할 구문&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2khrA/btqHuiSEc68/il6KNFFZWEFqFzWQJvfFK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2khrA/btqHuiSEc68/il6KNFFZWEFqFzWQJvfFK0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2khrA/btqHuiSEc68/il6KNFFZWEFqFzWQJvfFK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2khrA%2FbtqHuiSEc68%2Fil6KNFFZWEFqFzWQJvfFK0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MCDE9/btqHuiLLwn7/8XLKYMesLQiVaQ6uOeNVP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MCDE9/btqHuiLLwn7/8XLKYMesLQiVaQ6uOeNVP0/img.png&quot; data-alt=&quot;문자를 입력했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MCDE9/btqHuiLLwn7/8XLKYMesLQiVaQ6uOeNVP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMCDE9%2FbtqHuiLLwn7%2F8XLKYMesLQiVaQ6uOeNVP0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;문자를 입력했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhZCXF/btqHoXItlQR/CaweUK3wkMkoWTKOXau3o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhZCXF/btqHoXItlQR/CaweUK3wkMkoWTKOXau3o0/img.png&quot; data-alt=&quot;범위에 벗어난 수를 입력했을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhZCXF/btqHoXItlQR/CaweUK3wkMkoWTKOXau3o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhZCXF%2FbtqHoXItlQR%2FCaweUK3wkMkoWTKOXau3o0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;범위에 벗어난 수를 입력했을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;위와 같이 예외의 종류에 따라 구분하는 것이 가능합니다!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하지만, 예외 처리 구분에 없는 예외가 발생한다면 try except 구문을 사용했음에도 불구하고 프로그램에 오류가 생깁니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;예를 들어, 위에서 다루었던 코드 작성 시 아무런 의미없는 코드를 추가하게 되면 프로그램에 오류가 생깁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvfHGl/btqHjqkmHlb/dtiGIQcngsn2MTZ92iHv4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvfHGl/btqHjqkmHlb/dtiGIQcngsn2MTZ92iHv4K/img.png&quot; data-alt=&quot;일부러 오류를 작성한 코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvfHGl/btqHjqkmHlb/dtiGIQcngsn2MTZ92iHv4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvfHGl%2FbtqHjqkmHlb%2FdtiGIQcngsn2MTZ92iHv4K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;일부러 오류를 작성한 코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYeP3h/btqHscLOCfa/DfC4cv05c4vix9F3A9x9Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYeP3h/btqHscLOCfa/DfC4cv05c4vix9F3A9x9Kk/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYeP3h/btqHscLOCfa/DfC4cv05c4vix9F3A9x9Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYeP3h%2FbtqHscLOCfa%2FDfC4cv05c4vix9F3A9x9Kk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 구분되지 않는 예외가 발생하면 오류가 생깁니다.&lt;/p&gt;
&lt;p&gt;이는 모든 예외를 다룰 수 있는 Exception 을 사용하면 해결이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 예시를 볼게요!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z3920/btqHjqkmQcc/8f54VgQSeqNDufYgkfdcf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z3920/btqHjqkmQcc/8f54VgQSeqNDufYgkfdcf0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z3920/btqHjqkmQcc/8f54VgQSeqNDufYgkfdcf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ3920%2FbtqHjqkmQcc%2F8f54VgQSeqNDufYgkfdcf0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWw8R2/btqHsbMUt9w/QBUbNZJVkOwiucmLUziVj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWw8R2/btqHsbMUt9w/QBUbNZJVkOwiucmLUziVj1/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWw8R2/btqHsbMUt9w/QBUbNZJVkOwiucmLUziVj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWw8R2%2FbtqHsbMUt9w%2FQBUbNZJVkOwiucmLUziVj1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;이렇게 Exception 을 사용하면,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;다른 오류가 발생했을 때 코드를 정상적으로 실행시켜주고 그 오류의 종류가 무엇인지도 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;여태까지 예외 처리에 대해 배웠습니다.&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그런데 프로그램을 개발하다 보면, 아직 구현되지 않은 부분을 확실히 표현해야하기 때문에&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;일부러 예외를 발생시켜 프로그램을 종료해야하는 상황이 생깁니다. &lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이런 경우에 필요한 것이 raise 구문입니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;raise &amp;lt;예외 객체&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예시 :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zFrV9/btqHnjZiXR2/pxIJ8qXksIZeUPCgvZ2Nm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zFrV9/btqHnjZiXR2/pxIJ8qXksIZeUPCgvZ2Nm1/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zFrV9/btqHnjZiXR2/pxIJ8qXksIZeUPCgvZ2Nm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzFrV9%2FbtqHnjZiXR2%2FpxIJ8qXksIZeUPCgvZ2Nm1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 raise 구문을 입력하여 프로그램이 제대로 실행되지 않게 만들 수 있습니다!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'Hello Coding 파이썬' 을 참고하여 작성하였음.&lt;/p&gt;</description>
      <category>Python Basic</category>
      <category>Coding</category>
      <category>Python</category>
      <category>raise</category>
      <category>공부</category>
      <category>예외객체</category>
      <category>예외구분</category>
      <category>예외처리</category>
      <category>컴퓨터</category>
      <category>코딩</category>
      <category>파이썬</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/24</guid>
      <comments>https://bunnycode.tistory.com/24#entry24comment</comments>
      <pubDate>Thu, 27 Aug 2020 21:29:37 +0900</pubDate>
    </item>
    <item>
      <title>[Python] - 21) 예외 처리(try except else finally)</title>
      <link>https://bunnycode.tistory.com/23</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6MYDq/btqHlVQ2xgU/vCCOi1w4j48BEegUdNPBN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6MYDq/btqHlVQ2xgU/vCCOi1w4j48BEegUdNPBN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6MYDq/btqHlVQ2xgU/vCCOi1w4j48BEegUdNPBN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6MYDq%2FbtqHlVQ2xgU%2FvCCOi1w4j48BEegUdNPBN1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;바로 저번 포스팅에서 try except 구문을 활용해 예외 처리하는 방법을 &lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;배웠는데요.&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이번에는 try except 구문에다 else 를 추가해보도록 하겠습니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;try :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생할 가능성이 있는 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;except :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생했을 때 실행할 코드&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;else :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생하지 않았을 때 실행할 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;저번에 사용한 코드를 그대로 사용해볼게요. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;try, except 구문만 있을 때는 예외가 발생하지 않았을 때 실행할 코드도 try 영역에 넣었었죠?? &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이번에는 예외 발생 가능성이 있는 코드만 try 영역에 넣고 else 구문으로 나머지를 빼보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;try :&lt;br /&gt;&amp;nbsp; &amp;nbsp; input_1,input_2 = int(input(&quot;가속도 입력 &amp;gt;&quot;)),int(input(&quot;시간 입력 &amp;gt;&quot;))&lt;br /&gt;except :&lt;br /&gt;&amp;nbsp; &amp;nbsp; print(&quot;정수로만 입력 가능해요.&quot;)&lt;br /&gt;else :&lt;br /&gt;&amp;nbsp; &amp;nbsp; print(&quot;등가속도 운동할 때&quot;)&lt;br /&gt;&amp;nbsp; &amp;nbsp; print(&quot;가속도 :&quot;, input_1)&lt;br /&gt;&amp;nbsp; &amp;nbsp; print(&quot;속도 :&quot;, input_1 * input_2)&lt;br /&gt;&amp;nbsp; &amp;nbsp; print(&quot;거리 :&quot;, input_1 * input_2 ** 2 / 2)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sIt88/btqHnfWet9X/eStj90k5kRr3jITyKqPim1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sIt88/btqHnfWet9X/eStj90k5kRr3jITyKqPim1/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sIt88/btqHnfWet9X/eStj90k5kRr3jITyKqPim1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsIt88%2FbtqHnfWet9X%2FeStj90k5kRr3jITyKqPim1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cp5tII/btqHoXAQg9S/qha4mfLx9OOYK6uQnvwrG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cp5tII/btqHoXAQg9S/qha4mfLx9OOYK6uQnvwrG1/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cp5tII/btqHoXAQg9S/qha4mfLx9OOYK6uQnvwrG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcp5tII%2FbtqHoXAQg9S%2Fqha4mfLx9OOYK6uQnvwrG1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;try, except, else 구문으로 실행이 잘 된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이번에는 finally 를 추가해 사용해보도록 하겠습니다.&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;finally 구문은 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문입니다.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;try :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생할 가능성이 있는 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;except :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생했을 때 실행할 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;else :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생하지 않았을 때 실행할 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;finally :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;무조건적으로 실행할 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;즉, finally 구문은 예외가 발생하든 안하든 실행해야 할 코드를 실행해줍니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여태껏 들었던 예시 상황에서 정수로 입력하든 입력하지 않든 프로그램이 실행되었다는 것을 보여주기 위해 사용해보겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예시 :&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s8Xyv/btqHhRayM85/zL3QfKu1NUuyD6hdVHFrD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s8Xyv/btqHhRayM85/zL3QfKu1NUuyD6hdVHFrD1/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s8Xyv/btqHhRayM85/zL3QfKu1NUuyD6hdVHFrD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs8Xyv%2FbtqHhRayM85%2FzL3QfKu1NUuyD6hdVHFrD1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7ff7c/btqHbYO83dc/EGAbnKDCYUQVkQlVI1OKWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7ff7c/btqHbYO83dc/EGAbnKDCYUQVkQlVI1OKWK/img.png&quot; data-alt=&quot;정수 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7ff7c/btqHbYO83dc/EGAbnKDCYUQVkQlVI1OKWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7ff7c%2FbtqHbYO83dc%2FEGAbnKDCYUQVkQlVI1OKWK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정수 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mOWyx/btqHoWhBPcJ/JjpNWPv8YHQu2yY2AfpMb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mOWyx/btqHoWhBPcJ/JjpNWPv8YHQu2yY2AfpMb0/img.png&quot; data-alt=&quot;정수를 입력하지 않았을 때의 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mOWyx/btqHoWhBPcJ/JjpNWPv8YHQu2yY2AfpMb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmOWyx%2FbtqHoWhBPcJ%2FJjpNWPv8YHQu2yY2AfpMb0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정수를 입력하지 않았을 때의 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 정수를 입력할 때는try, else 구문과 finally 구문안의 코드가 실행되고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정수를 입력하지 않았을 경우에는 except 구문과 finally 구문안의 코드가 실행되는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저번 포스팅 부터 조건문, try except 구문 등등 예외 처리를 하는 방법들을 배워 봤는데,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여러 조합으로 가능한 예외 처리 구문들이 정말 많습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 중 모든 것을 활용해야 할 필요는 당연히 없지만, 다른 사람들이 작성해둔 코드를 이해할 수 있어야 하므로&lt;/p&gt;
&lt;p&gt;꼭 사용안하더라도 코드가 수행하는 역할 정도는 기억해두면 좋을 것 같아요!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'Hello Coding 파이썬'을 참고하여 작성하였음.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python Basic</category>
      <category>Coding</category>
      <category>Else</category>
      <category>Except</category>
      <category>finally</category>
      <category>Python</category>
      <category>try</category>
      <category>예외처리</category>
      <category>컴퓨터</category>
      <category>코딩</category>
      <category>파이썬</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/23</guid>
      <comments>https://bunnycode.tistory.com/23#entry23comment</comments>
      <pubDate>Wed, 26 Aug 2020 16:31:10 +0900</pubDate>
    </item>
    <item>
      <title>[Python] - 20) 예외 처리(조건문 활용, try except 구문)</title>
      <link>https://bunnycode.tistory.com/22</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJ9VV/btqG9TAi5oF/BaBU5tk4maW9DXYvhBhBdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJ9VV/btqG9TAi5oF/BaBU5tk4maW9DXYvhBhBdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJ9VV/btqG9TAi5oF/BaBU5tk4maW9DXYvhBhBdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJ9VV%2FbtqG9TAi5oF%2FBaBU5tk4maW9DXYvhBhBdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;여태까지 파이썬을 공부하면서 여러 오류들을 보셨을 겁니다. &lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;오류는 크게 &lt;span style=&quot;color: #009a87;&quot;&gt;'구문 오류'&lt;/span&gt; 와 &lt;span style=&quot;color: #009a87;&quot;&gt;'예외 오류(런타임 오류)'&lt;/span&gt; 로 나뉘는데 두 가지가 무엇인지 먼저 알아볼게요.&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;1) 구문 오류 = &lt;/b&gt;&lt;b&gt;프로그램 자체가 실행되지 않는 오류&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;예시 :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;구문 오류&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;프로그램이 실행 자체가 안되는 구만&quot;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위와 같이 일부러 두 번째 print 구문의 괄호를 작성하지 않으면 아래와 같은 오류가 발생합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mV0Xp/btqG9CdNysn/YdIihsaPluX4dONqB81Af1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mV0Xp/btqG9CdNysn/YdIihsaPluX4dONqB81Af1/img.png&quot; data-alt=&quot;오류 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mV0Xp/btqG9CdNysn/YdIihsaPluX4dONqB81Af1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmV0Xp%2FbtqG9CdNysn%2FYdIihsaPluX4dONqB81Af1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오류 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;저기 보이는 SyntaxError 라고 불리는 것은 '구문 오류'를 의미합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;첫 번째 작성된 올바른 print 구문도 실행되지 않은 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇다면 '예외 오류' 는 어떨까요?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2) 예외 오류(런타임 오류) = 프로그램이 일단 실행된 다음, 실행 중에 발생하는 오류&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;예시 :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;프로그래밍 일단 시작되었구나&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(x)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위와 같이 일부러 정의되지 않는 x 를 print 하는 코드를 작성하면 아래와 같은 오류가 발생합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v2j5R/btqHemaqbLg/jNOGWqKrRqpkrSmQ3dppF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v2j5R/btqHemaqbLg/jNOGWqKrRqpkrSmQ3dppF0/img.png&quot; data-alt=&quot;오류 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v2j5R/btqHemaqbLg/jNOGWqKrRqpkrSmQ3dppF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv2j5R%2FbtqHemaqbLg%2FjNOGWqKrRqpkrSmQ3dppF0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오류 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;첫 번째 print 구문은 실행이 되고 두 번째 구문에서 오류가 생긴 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 프로그램이 실행은 되지만 실행 된 후의 오류를 예외 혹은 런타임 오류라고 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 두 가지 오류 모두 코드 작성을 수정하면 바로 잡을 수 있지만, 경우에 따라 프로그램이 복잡해지면 예외를 처리하면 편한 경우가 생깁니다. (예외가 발생하지만 예외를 처리함으로서 정상적인 코드가 실행되도록 함, 말이 복잡하지만 예시를 통해 보면 이해가 수월해요!)&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이제부터 예외 처리 방법에 대해 다룰건데&lt;/b&gt;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;첫 번째로 예외 처리 방법으로 조건문을 한번 사용해봅시다!&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;바로 예시 볼게요! (가속도와 시간이 주어졌을 때, 속도와 거리를 구하는 코드)&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;input_1,input_2 = int(input(&quot;가속도 입력 &amp;gt;&quot;)),int(input(&quot;시간 입력 &amp;gt;&quot;))&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;등가속도 운동할 때&quot;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;가속도 :&quot;, input_1)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;속도 :&quot;, input_1 * input_2)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;거리 :&quot;, input_1*input_2**2/2)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mvsTv/btqHhFAPL9H/jDRWxfhQxKoCZCTcdOyxXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mvsTv/btqHhFAPL9H/jDRWxfhQxKoCZCTcdOyxXk/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mvsTv/btqHhFAPL9H/jDRWxfhQxKoCZCTcdOyxXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmvsTv%2FbtqHhFAPL9H%2FjDRWxfhQxKoCZCTcdOyxXk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;정상적으로 숫자를 입력하면 다음과 같이 코드가 잘 실행됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;266&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/twfMh/btqHgq4LnsF/pkV5SMQmInCZpOhio5nYgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/twfMh/btqHgq4LnsF/pkV5SMQmInCZpOhio5nYgk/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/twfMh/btqHgq4LnsF/pkV5SMQmInCZpOhio5nYgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtwfMh%2FbtqHgq4LnsF%2FpkV5SMQmInCZpOhio5nYgk%2Fimg.png&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;266&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;하지만, 정수를 입력한 것이 아니라 문자열을 입력했을때는???&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJkXiw/btqHhFgyI56/LZKYINjkpoP68BEtFgrmAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJkXiw/btqHhFgyI56/LZKYINjkpoP68BEtFgrmAk/img.png&quot; data-alt=&quot;오류 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJkXiw/btqHhFgyI56/LZKYINjkpoP68BEtFgrmAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJkXiw%2FbtqHhFgyI56%2FLZKYINjkpoP68BEtFgrmAk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;오류 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같은 오류가 발생하게 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이를 '정수로 입력하지 않았을 때'를 조건으로 구분해서, 해당 상황일 때 다른 처리를 하도록 해 예외를 처리해보겠습니다!&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;input_1,input_2 = input(&quot;가속도 입력 &amp;gt;&quot;),input(&quot;시간 입력 &amp;gt;&quot;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;if input_1.isdigit() and input_2.isdigit() :&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; num_1,num_2 = int(input_1),int(input_2)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; print(&quot;등가속도 운동할 때&quot;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; print(&quot;가속도 :&quot;, num_1)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; print(&quot;속도 :&quot;, num_1 * num_2)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; print(&quot;거리 :&quot;, num_1 * num_2 ** 2 / 2)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;else :&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; print(&quot;정수만 가능해요. 다시 입력해주세요&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JUaTZ/btqHiMGwWYX/JMUFWBfBsZcdWFKXOiB1p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JUaTZ/btqHiMGwWYX/JMUFWBfBsZcdWFKXOiB1p0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JUaTZ/btqHiMGwWYX/JMUFWBfBsZcdWFKXOiB1p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJUaTZ%2FbtqHiMGwWYX%2FJMUFWBfBsZcdWFKXOiB1p0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uNS0n/btqG69wtV5l/ic0OXiWwIkkpgjPksDFeHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uNS0n/btqG69wtV5l/ic0OXiWwIkkpgjPksDFeHk/img.png&quot; data-alt=&quot;정수가 아닌 것을 입력했을 때 예외 처리된 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uNS0n/btqG69wtV5l/ic0OXiWwIkkpgjPksDFeHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuNS0n%2FbtqG69wtV5l%2Fic0OXiWwIkkpgjPksDFeHk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정수가 아닌 것을 입력했을 때 예외 처리된 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 실행 화면을 보면 정수가 아닌 것을 입력했을 때 예외가 처리된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;두 번째로 try except 구문을 사용하여 예외 처리하는 방법을 알아보겠습니다.&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;try :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생할 가능성이 있는 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;except :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;예외가 발생했을 때 실행할 코드&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;예시 :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ln6Ev/btqHbZNyYhf/Foj1AmBVTwJmyemBfHJLYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ln6Ev/btqHbZNyYhf/Foj1AmBVTwJmyemBfHJLYk/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ln6Ev/btqHbZNyYhf/Foj1AmBVTwJmyemBfHJLYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fln6Ev%2FbtqHbZNyYhf%2FFoj1AmBVTwJmyemBfHJLYk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnMPFn/btqG9S2r1lf/zP0CoSosrsd3KUwtkdjHb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnMPFn/btqG9S2r1lf/zP0CoSosrsd3KUwtkdjHb1/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnMPFn/btqG9S2r1lf/zP0CoSosrsd3KUwtkdjHb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnMPFn%2FbtqG9S2r1lf%2FzP0CoSosrsd3KUwtkdjHb1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;try 안의 구문을 실행해보고 실행 되지 않는 경우 except 구문을 실행하라!&lt;/p&gt;
&lt;p&gt;이런 의미로 받아들이니 저는 이해가 수월했어요!!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;try except 구문을 잘 알고 있다면 이는 코드의 활용 방법에도 다양하게 적용될 수 있습니다!&lt;/p&gt;
&lt;p&gt;예를 들어, 주어진 리스트에서 숫자로 변환되는 것들로만 이루어진 새로운 리스트를 만들어보겠습니다!&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;list_1 = [&quot;123&quot;, &quot;313&quot;, &quot;515&quot;, &quot;918&quot;, &quot;나는 문자열이지롱&quot;, &quot;717&quot;]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;list_2 = []&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; for item in list_1 :&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try :&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; float(item)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; list_2.append(item)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except :&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pass&lt;br /&gt;print(&quot;{} 내부에 있는 숫자는&quot;.format(list_1))&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;print(&quot;{}입니다.&quot;.format(list_2)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NStjB/btqG9Be0pu8/F4imKs0ZAhJPurWk3zYyM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NStjB/btqG9Be0pu8/F4imKs0ZAhJPurWk3zYyM0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NStjB/btqG9Be0pu8/F4imKs0ZAhJPurWk3zYyM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNStjB%2FbtqG9Be0pu8%2FF4imKs0ZAhJPurWk3zYyM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YOoiv/btqHjq4l4dl/o5GKUjg6oUK4cpLBv88j1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YOoiv/btqHjq4l4dl/o5GKUjg6oUK4cpLBv88j1K/img.png&quot; data-alt=&quot;코드 출력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YOoiv/btqHjq4l4dl/o5GKUjg6oUK4cpLBv88j1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYOoiv%2FbtqHjq4l4dl%2Fo5GKUjg6oUK4cpLBv88j1K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 출력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'Hello Coding 파이썬' 을 참고하여 작성하였음.&lt;/p&gt;</description>
      <category>Python Basic</category>
      <category>Coding</category>
      <category>Except</category>
      <category>Python</category>
      <category>try</category>
      <category>tryexcept</category>
      <category>예외처리</category>
      <category>컴퓨터</category>
      <category>코딩</category>
      <category>파이썬</category>
      <category>프로그래밍</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/22</guid>
      <comments>https://bunnycode.tistory.com/22#entry22comment</comments>
      <pubDate>Tue, 25 Aug 2020 17:51:51 +0900</pubDate>
    </item>
    <item>
      <title>[Python] - 19) 파일 처리, with 구문</title>
      <link>https://bunnycode.tistory.com/21</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drhOvU/btqHbY8lGMm/4XEjwozqrifKBj54Hm9us0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drhOvU/btqHbY8lGMm/4XEjwozqrifKBj54Hm9us0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drhOvU/btqHbY8lGMm/4XEjwozqrifKBj54Hm9us0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrhOvU%2FbtqHbY8lGMm%2F4XEjwozqrifKBj54Hm9us0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;350&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이번 포스팅에서는 파일 처리와 관련되는 함수들을 살펴볼게요!&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;(파일 = '텍스트 파일' + '바이러니 파일' 로 나뉘는데, 일단 '텍스트 파일' 관련된 내용만 볼게요.)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1) 첫번째로 파일 열고 닫기&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;# 파일 열기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;lt;파일 객체&amp;gt; = open(&amp;lt;문자열 : 파일 경로&amp;gt;, &amp;lt;문자열 : 읽기 모드&amp;gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;# 파일 닫기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;lt;파일 객체&amp;gt;.close()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 때, 파열 열기 모드는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;파일 열기 모드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;w&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;write 모드 (새로 쓰기 모드)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;a&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;append 모드 (뒤에 이어서 쓰기 모드)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;r&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;read 모드 (읽기 모드)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;예시 :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pgafW/btqG6e5z8g6/zErm2mMkouz1VlrHz8nPM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pgafW/btqG6e5z8g6/zErm2mMkouz1VlrHz8nPM0/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pgafW/btqG6e5z8g6/zErm2mMkouz1VlrHz8nPM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpgafW%2FbtqG6e5z8g6%2FzErm2mMkouz1VlrHz8nPM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위의 코드가 입력된 경로, 파일에 &quot;basic.txt&quot; 파일이 생긴 것을 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yKLZz/btqG7Sgp4wX/FO2fwsrNE9qnhtn9eGv9n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yKLZz/btqG7Sgp4wX/FO2fwsrNE9qnhtn9eGv9n1/img.png&quot; data-alt=&quot;basic.txt. 파일 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yKLZz/btqG7Sgp4wX/FO2fwsrNE9qnhtn9eGv9n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyKLZz%2FbtqG7Sgp4wX%2FFO2fwsrNE9qnhtn9eGv9n1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;basic.txt. 파일 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;클릭해서 열어 보면, 아래와 같이 텍스트가 입력된 텍스트 파일인 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmZaMz/btqHeloyEvt/DKzsZEZXQmkoXvzy0neiuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmZaMz/btqHeloyEvt/DKzsZEZXQmkoXvzy0neiuk/img.png&quot; data-alt=&quot;basic.txt 텍스트 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmZaMz/btqHeloyEvt/DKzsZEZXQmkoXvzy0neiuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmZaMz%2FbtqHeloyEvt%2FDKzsZEZXQmkoXvzy0neiuk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;basic.txt 텍스트 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;주의사항 : 파일을 open() 함수로 열면 꼭 close() 함수로 닫는 습관을 기르세요!!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(프로그램이 종료되면 자동으로 파일이 모두 닫히기는 하지만, 긴 프로그램을 만드려고 할 때 문제될 수 있으므로 &lt;/span&gt;&lt;span style=&quot;color: #ee2323; letter-spacing: 0px;&quot;&gt;실수하지 않도록 항상 닫아주는 것이 좋습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;2) with 키워드&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;위의 주의사항에서도 언급 했듯이 프로그램이 길어지면, open() 함수와 close() 함수 사이에 많은 코드가 들어갑니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;그래서 파일을 열고 닫지 않는 실수를 하는 경우가 생길 수 있는데, 이러한 것을 방지하기 위해 with 키워드가 생겼습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #009a87; letter-spacing: 0px;&quot;&gt;with 키워드를 통해 함수를 코드를 작성하면, with 구문 부분이 종료될 때 자동으로 파일이 닫힙니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;(tensorflow 로 perceptron 구현할 때도 사용했었는데, 기억 나시나요?)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;with open(&amp;lt;문자열 : 파일 경로&amp;gt;, &amp;lt;문자열 : 읽기 모드&amp;gt;) as &amp;lt;파일 객체&amp;gt; :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;문장&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예시 :&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvaOLe/btqG9BrW4v8/4kreVpVP55ZkCpKgqBUXe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvaOLe/btqG9BrW4v8/4kreVpVP55ZkCpKgqBUXe1/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvaOLe/btqG9BrW4v8/4kreVpVP55ZkCpKgqBUXe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvaOLe%2FbtqG9BrW4v8%2F4kreVpVP55ZkCpKgqBUXe1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMoIvp/btqG7Ru3Ck5/vp5iwx52iXjKOp0TRFj8Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMoIvp/btqG7Ru3Ck5/vp5iwx52iXjKOp0TRFj8Kk/img.png&quot; data-alt=&quot;생성된 txt 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMoIvp/btqG7Ru3Ck5/vp5iwx52iXjKOp0TRFj8Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMoIvp%2FbtqG7Ru3Ck5%2Fvp5iwx52iXjKOp0TRFj8Kk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생성된 txt 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 with 구문을 사용하면, 파일을 열고 닫지 않는 실수를 줄일 수 있겠죠?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3) 텍스트 읽기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;lt;파일 객체&amp;gt;.read()&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위의 코드로 파일 내부의 데이터를 모두 읽어 출력할 수 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예시 : &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KORlk/btqHcfbgvXo/Kj20k7TdtoavSfoDeSga5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KORlk/btqHcfbgvXo/Kj20k7TdtoavSfoDeSga5k/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KORlk/btqHcfbgvXo/Kj20k7TdtoavSfoDeSga5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKORlk%2FbtqHcfbgvXo%2FKj20k7TdtoavSfoDeSga5k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FotR8/btqG6AVfrG3/cgTGwMzxg8kQBdKctD74kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FotR8/btqG6AVfrG3/cgTGwMzxg8kQBdKctD74kk/img.png&quot; data-alt=&quot;코드 출력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FotR8/btqG6AVfrG3/cgTGwMzxg8kQBdKctD74kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFotR8%2FbtqG6AVfrG3%2FcgTGwMzxg8kQBdKctD74kk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 출력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아까 text 파일에 입력한 &quot;with 구문으로 텍스트 작성해보기&quot; 가 출력되어 나온 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;4) 텍스트 한 줄 씩 읽기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;텍스트를 사용해 데이터를 구조적으로 표현할 수 있는 방법으로 CSV, XML, JSON 등이 있는데, 이 중 CSV 를 살펴볼게요.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CSV = Comma Separated Values 의 줄임말인데, 쉼표들로 데이터를 구분하는 방식입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를 들어,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;회사, 기종, 시리즈&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;애플, 아이폰, xs max&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;삼성, 갤럭시, 노트 20&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위와 같이 한 줄에 하나의 데이터를 나타내며, 각각의 줄에서는 쉼표를 사용해 데이터를 구분해서 입력합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예시로, 1000명의 이름, 키, 몸무게 데이터를 가진 파일을 만들고 파일을 한 줄씩 읽어 들여 처리하는 방법을 알아볼게요!&lt;/p&gt;
&lt;p&gt;(random, random.randrange 같은 것들은 아직 안 배웠는데 일단 사용해보겠습니다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5VwUs/btqHhFAdmq2/ld1j0aNc2ZOfZ6vbAtSFIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5VwUs/btqHhFAdmq2/ld1j0aNc2ZOfZ6vbAtSFIK/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5VwUs/btqHhFAdmq2/ld1j0aNc2ZOfZ6vbAtSFIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5VwUs%2FbtqHhFAdmq2%2Fld1j0aNc2ZOfZ6vbAtSFIK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RMKC9/btqHhEuylWb/Qf3w92NvPETUee6LTMczh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RMKC9/btqHhEuylWb/Qf3w92NvPETUee6LTMczh1/img.png&quot; data-alt=&quot;생성된 1000명의 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RMKC9/btqHhEuylWb/Qf3w92NvPETUee6LTMczh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRMKC9%2FbtqHhEuylWb%2FQf3w92NvPETUee6LTMczh1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생성된 1000명의 데이터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 생긴 데이터를 for 반복문으로 한 줄 씩 읽어줍니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;for &amp;lt;한 줄을 나타내는 문자열&amp;gt; in &amp;lt;파일 객체&amp;gt; :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;nbsp; &amp;nbsp; pass&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;위의 코드를 사용해서, 키와 몸무게로 BMI 도 계산해봅시다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhWyyO/btqG77dM2x6/K6lAO0sLRc22QGOSNAjCoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhWyyO/btqG77dM2x6/K6lAO0sLRc22QGOSNAjCoK/img.png&quot; data-alt=&quot;코드 입력 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhWyyO/btqG77dM2x6/K6lAO0sLRc22QGOSNAjCoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhWyyO%2FbtqG77dM2x6%2FK6lAO0sLRc22QGOSNAjCoK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 입력 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cunMAw/btqHjqvUBLb/DnmkcNzIlBjX8FnFkJDb6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cunMAw/btqHjqvUBLb/DnmkcNzIlBjX8FnFkJDb6K/img.png&quot; data-alt=&quot;코드 실행 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cunMAw/btqHjqvUBLb/DnmkcNzIlBjX8FnFkJDb6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcunMAw%2FbtqHjqvUBLb%2FDnmkcNzIlBjX8FnFkJDb6K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코드 실행 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 파일의 데이터를 한 줄 씩 읽으면서, 원하는 데이터를 입력받아 사용할 수도 있습니다!!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예시가 좀 어려운데 한 줄 한 줄 무슨 뜻인지 이해하고 기억 안나는거 복습 하시면 도움이 되실 것 같습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'Hello Coding 파이썬' 을 참고하였음.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Python Basic</category>
      <category>Close</category>
      <category>file</category>
      <category>Open</category>
      <category>Python</category>
      <category>read</category>
      <category>with 구문</category>
      <category>코딩</category>
      <category>파이썬</category>
      <category>파일 처리</category>
      <category>프로그래밍</category>
      <author>버즈밴드</author>
      <guid isPermaLink="true">https://bunnycode.tistory.com/21</guid>
      <comments>https://bunnycode.tistory.com/21#entry21comment</comments>
      <pubDate>Mon, 24 Aug 2020 19:17:43 +0900</pubDate>
    </item>
  </channel>
</rss>