티스토리 뷰

 

https://www.youtube.com/watch?v=KHGoFDB-raE

출처는 다음 영상입니다. 해당 포스팅은 파이썬에대한 기초적인 선행지식은 있다고 가정합니다.

[3B1B 따라잡기 list]

2023.05.11 - [Computer/코딩 개꿀팁] - [3B1B 따라잡기] 1. Manim 설치 with vscode

2023.05.12 - [Computer/코딩 개꿀팁] - [3B1B 따라잡기] 2. How to create Scene

 

이번에는 manim에서 코드 에러가 났을 때 어떻게 표시되는지, 어떻게 해결하는지 간단하게 알아보자, 파이썬의 에러메세지 출력과 크게 다를 바는 없다. 본인이 파이썬에 이미 익숙한 유저라면 굳이 이 포스팅을 읽을 필요는 없다.

 

1. NameError

class Errors(Scene):
    def construct(self):
        c = Circle(radius=2)

        self.play(Write(circle)) # 잘못된 경우 : circle이라는 변수는 지정하지 않았다.

지정되지 않은 변수를 출력할 때 어떤 오류 메세지를 출력하는지 확인해보자. 

NameError: 'circle' is not defined

파이썬과 마찬가지로 선언되지 않은 변수에 대해서 는 not defined 에러가 발생한다. 그리고 친절하게도 어떤 라인에서 에러가 발생했는지 알려준다. 현재는 30번째 줄에서 에러가 났다는 것을 확인 할 수 있다.

그러면 에러에 따라 여러분이 코드를 고쳐주면 된다. 당연하지만 Manim에서 발생하는 모든 에러를 다 설명할수는 없는 노릇이다. 그것은 여러분들이 직접 찾아보며 고쳐보는 수 밖에 그러나 그런 노력 끝에는 분명 달콤함이 있으리라.

이제 코드를 고쳐보고 다시 돌려보자

class Errors(Scene):
    def construct(self):
        c = Circle(radius=2)

        self.play(Write(c)) # 변수명을 c로 정정했다.

 

제대로 원이 그려지는 것을 볼 수 있다.

정상적으로 출력이 되었다. 이렇게 NameError가 발생할 경우, 변수명 관련하여 오타나 실수한 부분이 있는지 확인하면 되겠다. 이런식으로 내 코드의 어떤 부분에서 에러가 발생하는지 알려주니까 그것을 기반으로 구글링을 통해 코드를 고쳐가면 된다.

 

2. IndentationError

이번에는 indentation을 정상적으로 하지 않았을 때 발생하는 에러에 대해 확인해보자. 물론 이것도 파이썬에 어느정도 익숙한 사용자라면 굳이 읽을 필요 없다. 이정도 에러는 여러분들도 쉽게 찾아내고 고칠 수 있을 것이다.

class Errors(Scene):
    def construct(self):
    c = Circle(radius=2) # 잘못된 indentation

        self.play(Write(c))

 

결과를 확인해보면 복잡해보이는 에러 메세지가 출력되는데 보통 파이썬의 에러 메세지는 맨마지막줄만 확인하면 된다.

맨 마지막 줄에 line27에서 IndentationError가 발생한 것을 볼 수 있다. 작성하면서도 이걸 굳이 써야되나 싶은 수준의 간단한 에러라서 그냥 파이썬과 동일하게 indentation을 맞춰주면 된다는 개념만 알고 넘어가도록 하자.

 

3. TypeError

이번엔 생성한 object 내부에 지정되지 않은 타입의 argument를 전달하면 나타나는 TypeError에 대해서 확인해보자.

class Errors(Scene):
    def construct(self):
        c = Circle(r=2) # argument 'radius' to 'r'

        self.play(Write(c))

Cricle이라는 object를 생성하는데 필요한 argument인 'radius' 옵션을 'r'로 바꿔보았다. 실행결과는 다음과 같다.

TypeError: unexpected keyword argument 'r'

이렇게 unexpected ~ Error가 출력되는 경우는 아주 간단하다 내가 입력한 무언가가 그 모듈이 원하던(기대하던) 값과 일치하지 않는 것이므로 모듈이 원하는 형태로 바꿔주고 다시 입력해주면 보통은 해결할 수 있는 간단한 수준의 에러이다. 여기서는 당연히 'r'이라는 argument는 없다는 의미니까 'radius'로 옵션을 정정해주면 실행되는것을 위에서 확인했었다.

확실하게 어떤식으로 고쳐야하는지 모르겠다면 Circle object를 클릭하고 F12키를 누르면 해당 object의 class code로 이동하는데, 여기에 대부분 코드의 작동 방식과 arguments들에 대한 설명이 args 형태로 잘 작성되어있으니 참고하여 해결하면 된다.

댓글