🐍 파이썬 (Python)

파이썬(Python) 기초 (15) EAFP error μ˜ˆμ™Έμ²˜λ¦¬ Try , except , raise

Newmon 2019. 12. 21. 17:44

 

이전 ν¬μŠ€νŒ…μ—μ„œ μ—λŸ¬μ˜ μ’…λ₯˜μ— λŒ€ν•΄μ„œ λ‹€λ£¨μ—ˆμŠ΅λ‹ˆλ‹€. νŒŒμ΄μ¬μ€ EAFPλ°©μ‹μ˜ μ½”λ”©μŠ€νƒ€μΌμ„ ꢌμž₯ν•œλ‹€κ³  ν•©λ‹ˆλ‹€.

EAFPλž€ “It’s Easier to Ask Forgiveness than Permission” 

“ν—ˆλ½μ„ κ΅¬ν•˜λŠ” 것 보닀 μš©μ„œλ₯Ό κ΅¬ν•˜λŠ” 것이 쉽닀.

μ—λŸ¬μ— μ•žμ„œ 일단 μˆ˜ν–‰ μ‹œν‚€κ³ (try), μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄ κ·Έλ•Œ μ²˜λ¦¬ν•œλ‹€(except) λΌλŠ” 뜻이라고 ν•©λ‹ˆλ‹€.

*μ˜ˆμ™Έμ²˜λ¦¬ 기본ꡬ쑰

try : μ—λŸ¬ λ°œμƒ κ°€λŠ₯성이 μžˆλŠ” μ½”λ“œ μ‹€ν–‰

    except : μ—λŸ¬λͺ… 1

    except : μ—λŸ¬λͺ… 2

    else : (for. if . try) μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜μ„λ•Œ μ‹€ν–‰

    finally : μ—λŸ¬μ˜ λ°œμƒ 여뢀와 관계없이 항상 μ‹€ν–‰λ˜λŠ” ꡬ문

 

*예제 1 기본 ꡬ쑰

#예제 1

name = ['nakamura', 'lee','park','tom']

try :
    x  = name.index('lee')

except ValueError:
    print('찾을 수 μ—†μŠ΅λ‹ˆλ‹€. ValueError λ°œμƒ')

else :
    print('OK μ—λŸ¬λ°œμƒ μ•ˆν•¨!')

좜λ ₯>>>>>>>>>>>>>>...OK μ—λŸ¬λ°œμƒ μ•ˆν•¨!

 nameμ΄λΌλŠ” λ¦¬μŠ€νŠΈμ— leeλΌλŠ” μš”μ†Œκ°€ μ‘΄μž¬ν•˜λ―€λ‘œ, μ—λŸ¬κ°€ λ°œμƒν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ else문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

λ§Œμ•½ name.index('ABC')라고 μž…λ ₯ν•œλ‹€λ©΄, 'ABC'λΌλŠ” 값을 찾을 수 μ—†μœΌλ―€λ‘œ ValueErrorκ°€ λ°œμƒν•˜κ³  λ”°λΌμ„œ except문이 μ‹€ν–‰λ©λ‹ˆλ‹€.

*예제 2 Exception

try :
    x = 1
    y = ['a','b']
    print(x+y)
except  Exception : #μ–΄λ–€ μ—λŸ¬κ°€ λ°œμƒν• μ§€ λͺ¨λ₯Όλ•ŒλŠ” κ³΅λ°±λ˜λŠ” Exception 으둜 놔두면 λͺ¨λ“  μ—λŸ¬λ₯Ό μΊμΉ˜ν•œλ‹€.

    print('μ—λŸ¬ λ°œμƒ!')
else :
    print('OK μ—λŸ¬λ°œμƒ μ•ˆν•¨!')

int와 리슀트의 연산은 λΆˆκ°€λŠ₯ν•˜λ©°, 이런 κ²½μš°μ—λŠ” Typeμ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ except 뒀에 TypeErrorλŒ€μ‹ μ—

곡백 λ˜λŠ” Exception으둜 놔두어도 μ˜ˆμ™Έμ²˜λ¦¬κ°€ λ©λ‹ˆλ‹€. (λͺ¨λ“  μ—λŸ¬ λ°œμƒμ‹œ exceptλ¬Έ 싀행됨)

*예제 3 Finally

try :
    x = 1
    y = ['a','b']
    print(x+y)
except  Exception : 

    print('μ—λŸ¬ λ°œμƒ!')
else :
    print('OK μ—λŸ¬λ°œμƒ μ•ˆν•¨!')

finally :  #무쑰건 μ‹€ν–‰ μ—λŸ¬λ˜ μ•„λ‹ˆλ˜

    print('μ—λŸ¬κ°€ λ‚˜λ˜ μ•ˆλ‚˜λ˜ 이 글은 좜λ ₯됨')

 

*예제 4 alias (as) 와 닀쀑 μ˜ˆμ™Έμ²˜λ¦¬

try :
    x = 1
    y = ['a','b']
    print(y.index('AEF'))

except ValueError as l:   #μˆœμ„œκ°€ μ€‘μš”ν•˜λ‹€. λ§ˆμ§€λ§‰μ— Exception으둜 λ†“λŠ”κ²Œ μ’‹λ‹€. 
             #asλ₯Ό μ΄μš©ν•˜μ—¬ μ—λŸ¬ λ‚΄μš©λ„ 좜λ ₯κ°€λŠ₯ν•˜λ‹€.
    print('벨λ₯˜ μ—λŸ¬ λ°œμƒ')
    print('μ—λŸ¬λ‚΄μš© :',l)     
except IndexError :
    print('인덱슀 μ—λŸ¬ λ°œμƒ')

except Exception:
    print('μ•Œ 수 μ—†λŠ” μ—λŸ¬ λ°œμƒ')

else :
    print('OK μ—λŸ¬λ°œμƒ μ•ˆν•¨!')

import ν• λ•Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ aliasλ₯Ό μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€. 그리고 닀쀑 μ˜ˆμ™Έμ²˜λ¦¬μ‹œμ—λŠ” μœ„μ—μ„œ λΆ€ν„° μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬λ˜λ―€λ‘œ

λ°˜λ“œμ‹œ λ°œμƒν™•λ₯  높은 μ—λŸ¬λ₯Ό μœ„μ— λ°°μΉ˜ν•˜λŠ”κ²ƒμ΄ μ€‘μš”ν•©λ‹ˆλ‹€. μ²˜μŒλΆ€ν„° λͺ¨λ“  μ—λŸ¬λ₯Ό μ²˜λ¦¬ν•˜λŠ” Exceptionλ₯Ό λ°°μΉ˜ν•œλ‹€λ©΄

μ•„λž˜ ꡬ문은 μžˆμœΌλ‚˜ λ§ˆλ‚˜ν•œ μ‘΄μž¬κ°€ λ©λ‹ˆλ‹€.

 

*예제 5 raise μ—λŸ¬ λ°œμƒμ‹œν‚€κΈ°

try :
    a = 'Apple'
    if a == 'Apple?W' : 
        print('μ˜€μΌ€μ΄')
    else : 
        raise ValueError  #ValueErrorλ₯Ό 직접 λ°œμƒμ‹œν‚΄

except ValueError :
    print('λ¬Έμ œλ°œμƒ')