본문 바로가기
Programming/Python

파이썬 프로그램 버그 없이 만들기 8가지 팁

by NAMP 2021. 9. 1.

Make Your Python Program Bug-Free: 8 Essential Tips

 

Make Your Python Program Bug-Free: 8 Essential Tips

Although bugs are nearly inevitable in programming, senior developers can avoid lots of unnecessary bugs and write robust programs.

medium.com

파이썬 프로그램 버그 없이 만들기 8가지 팁

1. 변수 범위

score = 100

def test():
    score =0
    print(score)

test()
# 0
print(score)
# 100

함수안의 score 와 전역 변수 score 는 다르게 취급된다.

같이 사용하고 싶은 경우

score = 100

def test():
    global score
    score = 0
    print(score)

test()
# 0
print(score)
# 0

변경되지 않는 값일 경우에는 상수로 사용

class CONST:
    SCORE = 100

def test():
    print(CONST.SCORE)

2. 타입 변경하지 않기

파이썬은 동적 타입 언어지만, 버그를 없애기 위해서 타입을 변경하지 않는다.

3. 딕셔너리에서 값을 얻는 경우 주의

test = {'A': 5, 'B': 2}
print(test['C'])

# KeyError: 'C'

get() 함수 사용

test = {'A': 5, 'B': 2}
print(test.get('C'))
# None

기본값 설정

test = {'A': 5, 'B': 2}
print(test.get('C', 0))
# 0

4. eval 함수 사용하지 않기

def cal(a, b, op): 
    return eval(f'{a} {op} {b}')

cal('','',__import__('os').system('rm -rf *'))

5. 함수가 무엇을 반환할지 알기

def test():
    pass
print(test())
# None

__init()__ 함수에서는 반환 불가능

class Yang:
    def __init__(self):
        return 0
y = Yang()
# TypeError: __init__() should return None, not 'int'

6. 가변 객체를 기본 인수로 사용하지 마십시오

def show_my_gadgets(gadget, gadget_list=[]):
    gadget_list.append(gadget)
    print(gadget_list)

show_my_gadgets("PS7")
# ['PS7']
show_my_gadgets("iPhone 17")
# ['PS7', 'iPhone 17']
show_my_gadgets("iPad Pro 2077")
# ['PS7', 'iPhone 17', 'iPad Pro 2077']

gadget_list 의 기본값 변경

def show_my_gadgets(gadget, gadget_list=None):
    if gadget_list is None:
        gadget_list = []
    gadget_list.append(gadget)
    print(gadget_list)

show_my_gadgets("PS7")
# ['PS7']
show_my_gadgets("iPhone 17")
# ['iPhone 17']
show_my_gadgets("iPad Pro 2077")
# ['iPad Pro 2077']

7. 복잡한 Lambda 함수를 작성하지 마십시오

fib = lambda x: x if x<=1 else fib(x-1) + fib(x-2)

8. 할당과 복사의 차이점을 염두에 두십시오.

할당

A = [1, 2, 3]
B = A
B.append(4)
print(A)
# [1, 2, 3, 4]
print(B)
# [1, 2, 3, 4]

복사

import copy

A = [1, 2, 3]
# B = A.copy()
B = copy.copy(A)  # The same as `B = A.copy()`
B.append(4)

print(A)
# [1, 2, 3]
print(B)
# [1, 2, 3, 4]
view raw

https://miro.medium.com/max/1400/0*pq9T37oKPmy24Ke1.jpeg

출처

'Programming > Python' 카테고리의 다른 글

requests - 프록시 서버 이용  (0) 2020.09.16
Jupyter Lab CSS 변경  (0) 2019.07.03
BeautifulSoup 파싱이 뭔가 이상하다  (1) 2019.06.07
FTP file upload  (0) 2018.11.07
Jupyter lab 에 익스텐션 설치하기  (0) 2018.11.06

댓글