20200312 함수 내 import, exception

2020. 3. 12. 22:41개발/Python

1. 함수 내 import

 별건 아니고, 회사에서 쓰던 코드 보면 가끔 씩 함수 내에서 library를 import하는 경우가 있어 의아해서 찾아봤다. 그랬더니

https://hashcode.co.kr/questions/1054/import%EB%8A%94-%EA%BC%AD-%EC%BD%94%EB%93%9C-%EB%A7%A8-%EC%9C%97%EC%A4%84%EC%97%90-%EC%8D%A8%EC%95%BC-%ED%95%98%EB%82%98%EC%9A%94

 

import는 꼭 코드 맨 윗줄에 써야 하나요?

보통 모듈을 import할 때는 소스코드1보다는 소스코드2같이 맨 윗줄에 넣는 것 같던데이 클래스안에서만 쓰이는 모듈이라면 굳이 맨 윗줄에 import해 줄 필요는 없을 것 같은데 다들 맨 윗줄에서 import하나요? 더 빨라서 그런걸까요 ?_? 소스코드1 class SomeClass(object): def not_often_called(self) from datetime import datetime self.datetime =

hashcode.co.kr

이 곳에서 함수 내에서 import를 하면 좀더 수행시간이 빠르다고 한다. 하지만 권장하지는 않는다고 한다.(형식 때문에...!)

 

2. exception처리에 관해...

사실 여태까지 학교에서 script만 짜거나 스켈레톤 코드 위에서 놀았기 때문에(웹 개발은 더더욱 해본적 없었다!) exception처리에 관해 신경쓴적이 없었다. 하지만 내가 request를 보내고자 하는 서버가 응답을 보내주지 않는 등의 사태에 대해 대비하기 위해 exception 처리가 중요함을 깨닫고, 다음과 같이 Exception을 상속받으며 처리하면 간편하게 할 수 있다는 것을 알게 되었다.

class SpecialException(Exception):
    def __init__(self, message):
        super(SpecialException, self).__init__(message)
        self.message = message
        
class SpecialSpecialException(SpecialException):
	def __init__(self, message=None, field=None, error=None):
    	self.field = field
    	self.error = error
        self.message = message
        super(SpecialSpecialErrorException, self).__init__(message)
        
class SpecialError(enum.Enum):
    # general case: 1XXX
    KIND_OF_ERROR1 = 1000
    ....
    

 

이렇게 한 뒤 특정 에러가 날때마다 SpecialError의 에러케이스들을 통해 raise SpecialSpecialException(error=SpecialError.KIND_OF~~)처리 해주면 FE에서 에러메세지를 나타내기 용이하다.