22 Mon

[HEAD FIRST PYTHON] 11๊ฐ• ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์‹คํŒจ

  • ์›น ๊ณต๊ฒฉ

    • SQL ์ธ์ ์…˜ : ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋…ธ๋ฆฐ ๊ณต๊ฒฉ

    • ์‚ฌ์ดํŠธ ์Šคํฌํ‹ฐ๋ฆฝํŒ… : ์›น์‚ฌ์ดํŠธ๋ฅผ ๋…ธ๋ฆฐ ๊ณต๊ฒฉ

  • ์ž…์ถœ๋ ฅ์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„

  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์‹คํŒจ

    • builtins.RuntimeError

์ฝ”๋“œ๋‚˜ ๋กœ์ง์ด ์ž˜๋ชป๋˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์—๋Ÿฌ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ๋‚ด์žฅ๋œ ์˜ˆ์™ธ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ชจ๋“  ๋‚ด์žฅ ์˜ˆ์™ธ ๋ชฉ๋ก์€ https://docs.python.org/3/library/exceptions.html ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์—๋Ÿฌ๋ฅผ ์žก๋Š” ๊ฒƒ์—์„œ ๊ทธ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐœ์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งœ์•ผ๋œ๋‹ค.

try:
    with open("file.txt") as f:
        data = f.read()
    print(data)
except FileNotFoundError:
    print("File is missing")

์ด ๋•Œ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  ์—๋Ÿฌ๋Š” Exception์„ ์ƒ์†๋ฐ›๋Š”๋‹ค.

https://dojang.io/mod/page/view.php?id=2398
  • FileNotFoundError

  • PermissionError

  • NameError

  • EOFError

  • BufferError

  • OSError

  • MemoryError

  • and so on

๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋ชจ๋“  ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ์žก์•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์Šค์œ„ํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

try:
    with open("file.txt") as f:
        data = f.read()
    print(data)
except FileNotFoundError:
    print("File is missing")
except:
    print("Something wrong")

์ด ๋•Œ์˜ ๋ฌธ์ œ์ ๋„ ์žˆ๋‹ค. ์–ด๋–ค ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋Š”์ง€ ์ž์„ธํžˆ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋•Œ๋Š” sys ๋กœ ์˜ˆ์™ธ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

  • sys.exc_info() ๋กœ ํ˜„์žฌ ์ฒ˜๋ฆฌ ์ค‘์ธ ์˜ˆ์™ธ์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

    • ์˜ˆ์™ธ์˜ ์œ ํ˜•, ์˜ˆ์™ธ ๊ฐ’, ์—ญ์ถ”์  ๊ฐ์ฒด์˜ 3๊ฐ€์ง€ ๊ฐ’์„ ๊ฐ–๋Š” ํŠœํ”Œ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    • ์˜ˆ์™ธ๊ฐ€ ์—†์œผ๋ฉด (None, None, None) ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

try:
    1 / 0
except:
    err = sys.exc_info()
    for e in err:
        print(e)

>>> <class 'ZeroDivisionError'>
>>> division by zero
>>> traceback object at 0x105b22188>

๋ชจ๋“  ์˜ˆ์™ธ๋Š” Exception์„ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

try:
    with open("file.txt") as f:
        data = f.read()
    print(data)
except FileNotFoundError:
    print("File is missing")
except Exception as err:
    print("Something wrong : ", str(err))

์ด ๋•Œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ์ฝ”๋“œ๋ฅผ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค. python backend ์ฝ”๋“œ์™€ mysql backend database๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” ํ›„์— MySQL์„ PostgreSQL๋กœ ๋ฐ”๊ฟ”์•ผ ํ•  ๋•Œ ๊ณค๋ž€ํ•œ ์ ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

except mysql.connector.errors.InterfaceError as err:

์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. ์ปค์Šคํ…€ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  Exception ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋„๋ก ํ•œ๋‹ค. ์ด ๋•Œ, raise ํ‚ค์›Œ๋“œ๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

class ConnectionError(Exception):
    pass
    
try:
    raise ConnectionError("Butter!")
except ConnectionError as err:
    print(str(err))

>>> "Butter!"
  • ์ด ๋•Œ ConnectionError ๋‚ด๋ถ€๋ฅผ pass๋กœ ์ •์˜ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” Exception์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์ด ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต.

Last updated

Was this helpful?