파이썬 인자전달 질문이요

조회수 867회
def is_product_availability_matrix(matrix_a, matrix_b):
    row_a = [row for row in matrix_a]
    column_b = [column for column in zip(*matrix_b)]

    if(len(row_a) == len(column_b)):
        result = True
    else:
        result = False

    return result

matrix_x= [[2, 5], [1, 1]]
matrix_y = [[1, 1, 2], [2, 1, 1]]
matrix_z = [[2, 4], [5, 3], [1, 3]]
print(is_product_availability_matrix(matrix_y, matrix_z)) # True
print(is_product_availability_matrix(matrix_z, matrix_x)) # True
print(is_product_availability_matrix(matrix_z, matrix_w)) #  False
print(is_product_availability_matrix(matrix_x, matrix_x)) # True

print 3번째를 보시면 matrix_w라는 없는 값을 인자로 전달했을때 False를 오류가 뜨는데 이것을 return 값으로 False를 받고 싶습니다. 어떻게 해야 할까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 일단 변수가 없기 때문에 NameError 이 발생합니다.

    일반적으로 NameError 예외처리를 통해 처리할 수 있습니다.

    그러나 질문과 같이 간단한 처리의 경우

    print(is_product_availability_matrix(matrix_z, matrix_w if 'matrix_w' in locals() else []))
    

    와 같이 처리할 수 있습니다.

    지역변수중에 존재여부를 확인해서 없다면 빈 리스트를 전달합니다.

    • 혹시 함수 내에서 판단하는 방법은 없을까요? 인자전달이 잘못된 경우를 가정하고 하는거라서요 알 수 없는 사용자 2018.2.19 14:27
    • 그런경우는 NameError 예외처리를 해야 합니다. 파이썬은 다이나믹한 언어라 런타임 오류를 항상(!) 염두해두어야 합니다. 함수호출전에 NameError가 발생하기 때문에 함수내에서는 변수가 존재하는지 여부를 알 수가 없습니다. cpu가 파라미터를 처리하는 방식(스택에 push)을 이해하게 되면(존재하지도 않는 파라미터 주소를 스택에 넣을 수 없습니다.) 왜 안되는 것인지 이해를 할 수 있습니다. 정영훈 2018.2.19 14:39

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)