Skip to content

Commit 52674a7

Browse files
nainsysgitbook-bot
authored andcommitted
GitBook: [master] 2 pages and one asset modified
1 parent 647d77d commit 52674a7

File tree

3 files changed

+303
-0
lines changed

3 files changed

+303
-0
lines changed

.gitbook/assets/31201.jpg

27.8 KB
Loading

3./3.11.-date-and-time.md

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,140 @@
11
# 3.11. Date & Time
22

3+
파이썬은 여러 가지 방법으로 날짜와 시간을 처리할 수 있습니다. 시간 및 달력 모듈은 날짜와 시간을 처리하는데 매우 유용합니다.
4+
5+
#### 3.11.1. Tick, Tuple이 무엇이지?
6+
7+
시간 간격은 초 단위의 부동 소수점 숫자인데 특정 시간은 1970 년 1 월 1 일 오전 12시 \(epoch\) 이후 초 단위로 표시됩니다. Python에는 시간에 대한 작업과 표현 간의 변환을 위한 함수를 제공하는 시간 모듈이 있습니다. time.time \(\) 함수는 1970 년 1 월 1 일 오전 12시부터 현재 시스템 시간을 ticks 단위로 반환합니다.
8+
9+
```python
10+
import time; # This is required to include time module.
11+
ticks = time.time()
12+
print "Number of ticks since 12:00am, January 1, 1970:", ticks
13+
```
14+
15+
날짜 계산은 tick 을 사용하면 쉽게 계산 할 수 있습니다. 그러나 신기원\(epoch\) 이전의 날짜는 이 형식으로 표현 될 수 없습니다. 먼 미래의 날짜도 이런 방식으로 표현될 수 없습니다. 컷오프 포인트는 2038년 어떤 시점의 유닉스와 윈도우를 위한 것입니다.
16+
17+
또한 많은 파이썬의 시간 함수는 시간을 9 개의 숫자로 된 튜플 시퀀스로 처리합니다.
18+
19+
| Index | Field | Values |
20+
| :--- | :--- | :--- |
21+
| 0 | 4-digit year | 2008 |
22+
| 1 | Month | 1 to 12 |
23+
| 2 | Day | 1 to 31 |
24+
| 3 | Hour | 0 to 23 |
25+
| 4 | Minute | 0 to 59 |
26+
| 5 | Second | 0 to 61 \(60 or 61 are leap-seconds\) |
27+
| 6 | Day of Week | 0 to 6 \(0 is Monday\) |
28+
| 7 | Day of year | 1 to 366 \(Julian day\) |
29+
| 8 | Daylight savings | -1, 0, 1, -1 means library determines DST |
30+
31+
위의 튜플은 C언어의 struct\_time 구조체와 같습니다. 이 구조체에는 다음과 같은 특성이 있습니다.
32+
33+
| Index | Attributes | Values |
34+
| :--- | :--- | :--- |
35+
| 0 | tm\_year | 2008 |
36+
| 1 | tm\_mon | 1 to 12 |
37+
| 2 | tm\_mday | 1 to 31 |
38+
| 3 | tm\_hour | 0 to 23 |
39+
| 4 | tm\_min | 0 to 59 |
40+
| 5 | tm\_sec | 0 to 61 \(60 or 61 are leap-seconds\) |
41+
| 6 | tm\_wday | 0 to 6 \(0 is Monday\) |
42+
| 7 | tm\_yday | 1 to 366 \(Julian day\) |
43+
| 8 | tm\_isdst | -1, 0, 1, -1 means library determines DST |
44+
45+
#### 3.11.2. 현재 시간 구하기
46+
47+
time.time\(\) 함수에서 구한 부동 소수점 tick 값을 튜플로 변환한 후 시간을 초 단위로 변환하려면 9 개의 항목이 모두 포함 된 시간-튜플을 변환하는 함수 localtime을 사용하면 됩니다
48+
49+
```python
50+
import time #time module을 위해 필요한 모듈.
51+
52+
ticks = time.time()
53+
print("1970년 1월 1일 오전 12시 이후의 Tick 숫자:", ticks)
54+
55+
localtime = time.localtime(time.time())
56+
print("Local 현재 시간 :", localtime)
57+
localtime = time.asctime(time.localtime(time.time()))
58+
print("Local 현재 시간 :", localtime)
59+
60+
61+
```
62+
63+
위의 코드를 실행 하면 다음과 같은 결과를 얻을 수 있습니다.
64+
65+
```python
66+
197011일 오전 12시 이후의 Tick 숫자: 1552554699.0884836
67+
Local 현재 시간 : time.struct_time(tm_year=2019, tm_mon=3, tm_mday=14, tm_hour=18, tm_min=11, tm_sec=39, tm_wday=3, tm_yday=73, tm_isdst=0)
68+
Local 현재 시간 : Thu Mar 14 18:16:04 2019
69+
```
70+
71+
72+
73+
요구 사항에 따라 언제든지 형식을 지정할 수 있지만 읽을 수 있는 형식으로 시간을 가져 오는 간단한 방법은 asctime\(\) 함수를 사용하는 것입니다.
74+
75+
```python
76+
import time;
77+
localtime = time.asctime( time.localtime(time.time()) )
78+
print "Local current time :", localtime
79+
```
80+
81+
#### 3.11.3. 캘린더 모듈
82+
83+
캘린더 모듈은 연간 및 월간 캘린더로 표시하는있는 다양한 방법을 제공합니다.
84+
85+
```python
86+
import calendar
87+
cal = calendar.month(2019, 1)
88+
print(cal)
89+
```
90+
91+
```text
92+
March 2019
93+
Mo Tu We Th Fr Sa Su
94+
1 2 3
95+
4 5 6 7 8 9 10
96+
11 12 13 14 15 16 17
97+
18 19 20 21 22 23 24
98+
25 26 27 28 29 30 31
99+
```
100+
101+
#### 3.11.4. date & time Module
102+
103+
Python에서 제공하는 시간에 대한 작업과 표현 간의 변환을 위한 함수를 제공하는 time 모듈이 있습니다. 다음은 사용 가능한 모든 time method 와 attribute 목록입니다.
104+
105+
```text
106+
time.altzone
107+
time.asctime([tupletime])
108+
time.clock( )
109+
time.ctime([secs])
110+
time.gmtime([secs])
111+
time.localtime([secs])
112+
time.mktime(tupletime)
113+
time.sleep(secs)
114+
time.strftime(fmt[,tupletime])
115+
time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
116+
time.time( )
117+
time.tzset()
118+
time.timezone
119+
time.tzname
120+
```
121+
122+
캘린더 모듈은 주어진 달 또는 연도의 텍스트 달력을 인쇄하는 기능을 포함하여 달력 관련 기능을 제공합니다. 기본적으로 캘린더는 월요일을 첫 번째 요일로, 일요일을 마지막 요일로 사용합니다. 이를 변경하려면 calendar.setfirstweekday\(\) 함수를 사용하면 됩니다.
123+
124+
다음은 캘린더 모듈에서 사용할 수 있는 함수 목록입니다.
125+
126+
```text
127+
calendar.calendar(year,w=2,l=1,c=6)
128+
calendar.firstweekday( )
129+
calendar.isleap(year)
130+
calendar.leapdays(y1,y2)
131+
calendar.month(year,month,w=2,l=1)
132+
calendar.monthcalendar(year,month)
133+
calendar.monthrange(year,month)
134+
calendar.prcal(year,w=2,l=1,c=6)
135+
calendar.prmonth(year,month,w=2,l=1)
136+
calendar.setfirstweekday(weekday)
137+
calendar.timegm(tupletime)
138+
calendar.weekday(year,month,day)
139+
```
140+

3./3.12..md

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,167 @@
11
# 3.12. 파이썬 에러처리
22

3+
프로그램을 만들다 보면 수없이 많은 에러가 발생합니다. 물론 오류가 발생하는 이유는 프로그램이 잘못 동작되는 것을 막기 위한 것입니다. Python은 Python 프로그램의 예상치 못한 오류를 처리하고 디버깅 기능을 추가하는 두 가지 중요한 기능을 제공합니다.
4+
5+
* 예외 처리\(Exception Handling\)
6+
* 어설션\(Assertions\)
7+
8+
#### 3.12.1. Assertions
9+
10+
프로그램의 특정 지점에서 반드시 참\(True\)이 되어야 하는 문장을 말합니다. 일반적으로 오류를 확인하기 위해 코드에 Assertion을 넣습니다. Assertion이 실패하면 \(즉, 표현식이 거짓으로 평가되는 경우\) 프로그램이 중지되고 오류 메시지가 표시됩니다.
11+
12+
![](../.gitbook/assets/31201.jpg)
13+
14+
다음의 예제를 실행해 보면 개념이 명확해집니다.
15+
16+
```python
17+
import time
18+
lists = [1,3,6,3,8,7,13,23,13,2,3.14,2,3,7]
19+
20+
def test(t):
21+
print("현재 수행중인 값 =" + str(t))
22+
assert (type(t) is int), "주어진 값 " + str(t) + " 은 정수가 아닙니다"
23+
24+
for i in lists:
25+
test(i)
26+
time.sleep(1)
27+
```
28+
29+
```text
30+
현재 수행중인 값 =23
31+
현재 수행중인 값 =13
32+
현재 수행중인 값 =2
33+
현재 수행중인 값 =3.14
34+
Traceback (most recent call last):
35+
File "C:/Users/nains/PycharmProjects/OneBook/JustTest.py", line 9, in <module>
36+
test(i)
37+
File "C:/Users/nains/PycharmProjects/OneBook/JustTest.py", line 6, in test
38+
assert (type(t) is int), "주어진 값 " + str(t) + " 은 정수가 아닙니다"
39+
AssertionError: 주어진 값 3.14 은 정수가 아닙니다
40+
Process finished with exit code 1
41+
```
42+
43+
#### 3.12.2. 예외 처리\(Exception Handling\)
44+
45+
문법과 관련된 에러는 파이썬 인터프리터에서 에러메시지를 표시하여 디버깅이 가능합니다. 문장이나 표현식이 문법적으로 올바르다 할지라도, 실행하려고 하면 에러를 일으킬 수 있습니다. 실행 중에 감지되는 에러들을 _예외\(_Exception\) 라고 합니다. 예외는 프로그램 실행 중에 발생하여 프로그램의 명령 흐름을 방해하는 이벤트입니다. 일반적으로, 파이썬은 대처할 수 없는 상황에 처하게 되면 예외를 발생시킵니다. 예외는 오류를 나타내는 Python 객체입니다. 예외가 발생되면 즉시 예외를 처리해야합니다. 그렇지 않으면 파이썬이 종료됩니다.
46+
47+
예외처리를 위해 try, except문을 사용합니다. try, except 문에 대한 기본적인 구조는 아래와 같습니다.
48+
49+
```python
50+
try:
51+
You do your operations here;
52+
......................
53+
except ExceptionI:
54+
If there is ExceptionI, then execute this block.
55+
except ExceptionII:
56+
If there is ExceptionII, then execute this block.
57+
......................
58+
else:
59+
If there is no exception then execute this block.
60+
```
61+
62+
예외를 발생시킬 수 있는 의심스러운 코드가 있는 경우 try: 블록에 의심스러운 코드를 넣어 프로그램을 방어적으로 코딩합니다. try: 블록 다음에 except: 문을 포함시키고 예외 문제를 처리하는 코드 블록을 추가합니다.
63+
64+
이 예제는 쓰기 권한을 주고 파일을 열어 기록 하므로 정상 적으로 처리 됩니다.
65+
66+
```python
67+
try:
68+
fh = open("testfile", "w")
69+
fh.write("This is my test file for exception handling!!")
70+
except IOError:
71+
print("Error: can\'t find file or read data")
72+
else:
73+
print("Written content in the file successfully")
74+
fh.close()
75+
```
76+
77+
아래 예제는 쓰기 권한이 없이 파일을 열고 기록을 시도하므로 예외가 발생합니다.
78+
79+
```python
80+
try:
81+
fh = open("testfile", "r")
82+
fh.write("This is my test file for exception handling!!")
83+
except IOError:
84+
print("Error: can\'t find file or read data")
85+
else:
86+
print("Written content in the file successfully")
87+
```
88+
89+
아래 코드와 같이 finally 문을 사용 할 수도 있습니다.
90+
91+
```python
92+
try:
93+
fh = open("testfile", "w")
94+
try:
95+
fh.write("This is my test file for exception handling!!")
96+
finally:
97+
print("Going to close the file")
98+
fh.close()
99+
except IOError:
100+
print("Error: can\'t find file or read data")
101+
```
102+
103+
try 블록에서 예외가 발생하면 finally 블록으로 즉시 전달됩니다. finally 블록의 모든 명령문이 실행된 후에 예외가 다시 발생하고 try-except 문의 다음 상위 계층에 있으면 exceptsatements에서 처리됩니다.
104+
105+
#### 1.1.3. Exception의 인수\(Argument\)
106+
107+
exception에는 추가 정보를 제공하는 인수가 있을 수 있습니다. 인수의 내용은 예외에 따라 다릅니다. 다음과 같이 except 절에 변수를 제공하여 예외의 인수를 캡처합니다.
108+
109+
```python
110+
try:
111+
You do your operations here;
112+
......................
113+
except ExceptionType, Argument:
114+
You can print value of Argument here...
115+
```
116+
117+
단일 exception을 처리하기위한 코드를 작성하는 경우 except 문에서 예외 이름 뒤에 변수를 지정할 수 있습니다. 여러 exception을 트래핑하는 경우 exception 튜플을 사용할 수 있습니다.
118+
119+
이 변수는 대부분 exception의 원인을 포함하는 exception의 값을 받습니다. 변수는 하나의 값 또는 튜플 형태의 다중 값을 수신할 수 있습니다. 이 튜플은 대개 오류 문자열, 오류 번호 및 오류 위치를 포함합니다.
120+
121+
```python
122+
# Define a function here.
123+
def temp_convert(var):
124+
try:
125+
return int(var)
126+
except ValueError as Argument:
127+
print("The argument does not contain numbers\n", Argument)
128+
129+
# Call above function here.
130+
temp_convert("xyz");
131+
```
132+
133+
위의 코드는 다음과 같은 결과로 처리 됩니다.
134+
135+
```text
136+
The argument does not contain numbers
137+
invalid literal for int() with base 10: 'xyz'
138+
```
139+
140+
#### 1.1.4. Exceptions의 발생
141+
142+
raise 문을 사용하여 여러 가지 방법으로 예외를 발생시킬 수 있습니다. raise 문에 대한 일반적인 구문은 다음과 같습니다.
143+
144+
**raise \[Exception \[, args \[, traceback\]\]\]**
145+
146+
여기서 Exception은 예외의 유형 \(예: Error명\)이고 argument는 예외 인수 값입니다. 인수는 선택 사항으로 제공되지 않으면 예외 인수는 없는것으로 처리됩니다.
147+
148+
마지막 인자인 traceback은 선택적이며 \(실제로는 거의 사용되지 않는다.\), 존재한다면 예외에 사용되는 traceback 객체입니다.
149+
150+
예외는 문자열, 클래스 또는 객체가 될 수 있습니다. 파이썬 코어가 제기하는 대부분의 예외는 클래스이며, 클래스의 인스턴스인 인수가 있습니다. 새로운 예외를 정의하는 것은 매우 쉽고 다음과 같이 할 수 있습니다.
151+
152+
```python
153+
def functionName( level ):
154+
if level < 1:
155+
raise "Invalid level!", level
156+
# The code below to this would not be executed
157+
# if we raise the exception
158+
```
159+
160+
다음과 같은 예제를 실행해 보겠습니다.
161+
162+
```python
163+
x = 5
164+
if x < 10:
165+
raise ValueError('x should not be less than 10!')
166+
```
167+

0 commit comments

Comments
 (0)