컴퓨터/파이썬 공부

(코드 오류와 해결 기록) Type error : 함수와 모듈의 차이

방구석의 개굴이 2023. 8. 12. 14:15
정상 코드
a = np.random.random((2,3,4))
print('a:', a)
print(a.ndim, a.shape)

> a: [[[0.15615354 0.77515008 0.08487473 0.73169956]
  [0.4467941  0.34976271 0.62645551 0.83021095]
  [0.46873536 0.13243796 0.88144812 0.42785753]]

 [[0.94530379 0.37032492 0.76448633 0.39943917]
  [0.76975247 0.16574426 0.65645438 0.8208407 ]
  [0.86166119 0.29406903 0.51078096 0.02516776]]]
3 (2, 3, 4)
오류 코드
a = np.random(2,3)
print('a: ', a)
print(a.ndim, a.shape)

> ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-18-ffbe88196f3f> in <cell line: 1>()
----> 1 a = np.random(2,3)
      2 print('a: ', a)
      3 print(a.ndim, a.shape)

TypeError: 'module' object is not callable

np.random.random 에서 같은 말이 두 번 나오길래 random을 한 개 지우고 np.random으로 실행시켜 봤더니 (원래 예제에 있던 내용 아님) type error 가 발생했다. 왜냐하면 np.random은 그 자체로 함수가 아니라 모듈이므로, 직접적인 값이 입력되는 것이 기대되지 않는다. 
맨 마지막줄에서 'module object is not callable'이라는 게 모듈은 함수처럼 호출가능한(callable) 객체가 아니라는 뜻이다. 

 

chat GPT 한테 함수와 모듈의 차이를 물어보았다. 
함수(Function): 함수는 일련의 작업을 수행하는 코드 블록입니다. 함수는 이름을 가지며, 필요한 입력 값을 받아서 처리한 후 결과를 반환할 수 있습니다. 함수를 정의하면 코드의 재사용성과 구조화에 도움이 됩니다.
예를 들어, 다음은 두 숫자를 더하는 함수의 간단한 예입니다:

def add_numbers(a, b):
  return a + b


모듈(Module): 모듈은 관련된 함수, 변수, 클래스 등의 코드를 하나의 파일에 모아놓은 것을 말합니다. 모듈은 다른 프로그램에서 재사용할 수 있는 코드 단위입니다. 모듈을 사용하여 코드를 논리적으로 구성하고 유지 관리하기 쉬워집니다.
예를 들어, NumPy는 파이썬의 모듈 중 하나로, 다차원 배열을 다루는 함수와 클래스 등을 제공합니다. 이 모듈을 사용하여 수치 계산을 쉽게 수행할 수 있습니다:

import numpy as np
   a = np.array([1, 2, 3, 4, 5])

위 코드에서 numpy 모듈을 불러오고, np.array 함수를 사용하여 배열을 생성합니다.



간단히 말하면, 함수는 특정 작업을 수행하는 코드 조각이고, 모듈은 관련된 함수와 코드를 모아놓은 파일입니다. 모듈은 큰 프로그램을 더 작고 관리 가능한 조각으로 분리하여 작업하기 좋도록 도와줍니다.

파이썬에서 모듈과 R에서 패키지 비교  (chat GPT)
파이썬에서의 모듈과 R에서의 패키지는 개념적으로 비슷한 역할을 합니다. 둘 다 코드의 모음을 구조화하고 재사용 가능한 형태로 제공하여 프로그래밍 환경을 확장하고 개선하는 데 사용됩니다.


파이썬에서의 모듈: 파이썬에서 모듈은 관련된 함수, 클래스, 변수 등을 하나의 파일에 모아놓은 것입니다. 이렇게 모듈을 사용하여 코드를 구조화하면 유지 보수가 쉬워지고, 코드 재사용성이 증가합니다. 모듈은 import 문을 사용하여 다른 파일에서 불러와 사용할 수 있습니다.


R에서의 패키지:
R에서 패키지는 함수, 데이터셋, 도움말 등을 하나의 단위로 묶어 놓은 것입니다. 패키지를 사용하여 다양한 분석 기능을 확장하고, 데이터 분석 작업을 효율적으로 수행할 수 있습니다. R 패키지를 불러오려면 library나 require와 같은 함수를 사용합니다.


두 개념은 유사하지만 언어 간에 구현 방식과 사용법이 다를 수 있습니다. 그래도 기본적으로 모듈과 패키지는 코드를 모아 관리하기 쉽게 만들어주는 개념으로서 상당히 유사합니다.

코드 실행시 발생하는 오류의 유형 : 실행 전 vs 실행 후 (chat GPT)
코드 실행 전에 발생하는 오류:

Syntax Error:
코드 문법이 잘못되어 파이썬 인터프리터가 코드를 해석하지 못할 때 발생하는 오류입니다.


코드 실행 중에 발생하는 오류:

ZeroDivisionError:
0으로 나누려고 할 때 발생합니다.

NameError:
정의되지 않은 변수나 함수를 사용하려고 할 때 발생합니다.

ValueError:
올바른 타입을 가진 데이터지만 올바른 값을 가지지 않을 때 발생합니다.

KeyError:
딕셔너리에서 존재하지 않는 키를 참조하려고 할 때 발생합니다.

AttributeError:
객체에 존재하지 않는 속성이나 메서드를 참조하려고 할 때 발생합니다.

FileNotFoundError:
파일을 찾을 수 없을 때 발생합니다.

MemoryError:
메모리가 부족하여 할당할 수 없을 때 발생합니다.

TypeError:
데이터의 타입이 잘못된 연산이나 동작에 사용되었을 때 발생합니다.