>

Page class 가있는 webscrapper를 만들고 있습니다 . 그러나 url 속성을 지정할 때 다음 오류 메시지가 나타납니다.   Page class 에 .

TypeError: 'str' object is not callable

내 코드 아래에서 찾기 :

class Page:
    def __init__(self, pid, cur_id, url=None, proxy=None):
        self.pid = pid
        self.cur_id = cur_id
        if url is None:
            self.url = self._build_url()
        else:
            self.url = url
        self.content = get_page_content(self.url, proxy)
        self.crawl_date = datetime.now()
    @property
    def _build_url(self):
        my_url = root + self.pid
        return my_url

어떤 제안?

수정 : 전체 역 추적 :

> Traceback (most recent call last):   File "C:\Program
> Files\JetBrains\PyCharm Community Edition
> 2019.1.3\helpers\pydev\pydevd.py", line 2060, in <module>
>     main()   File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\helpers\pydev\pydevd.py", line 2054, in main
>     globals = debugger.run(setup['file'], None, None, is_module)   File "C:\Program Files\JetBrains\PyCharm Community Edition
> 2019.1.3\helpers\pydev\pydevd.py", line 1405, in run
>     return self._exec(is_module, entry_point_fn, module_name, file, globals, locals)   File "C:\Program Files\JetBrains\PyCharm Community
> Edition 2019.1.3\helpers\pydev\pydevd.py", line 1412, in _exec
>     pydev_imports.execfile(file, globals, locals)  # execute the script   File "C:\Program Files\JetBrains\PyCharm Community Edition
> 2019.1.3\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
>     exec(compile(contents+"\n", file, 'exec'), glob, loc)   File "C:/single_offers.py",
> line 146, in <module>
>     main()   File "C:/single_offers.py",
> line 68, in main
>     p = Page(id, cur_id, proxy=proxy)   File "C:/single_offers.py",
> line 109, in __init__
>     self.url = self._build_url() TypeError: 'str' object is not callable
> 
> Process finished with exit code 1

  • 답변 # 1

    _build_url 를 선언했습니다  속성이 되십시오. 결과적으로 속성 이름을 호출하지 않고 속성 이름만으로 액세스 할 수 있습니다.

    self.url = self._build_url
    
    

  • 답변 # 2

    _build_url 를 만들었습니다  재산, 그래서 self._build_url   str 를 얻는다  콜 파렌은 없지만 파렌을 추가하여 self.url = self._build_url() 로 만듭니다. . 결과 문자열을 호출하려고합니다. @property 를 제거하십시오  데코레이터를 사용하여 일반적인 방법을 사용하거나 호출하지 않고 속성을 사용하기 위해 호출 지점을 사용 지점에서 제거합니다.

  • 답변 # 3

    _build_url 를 만들었습니다.   @property . 이 때문에이 메소드를 호출 할 때 self._build_url() 를 사용하면 안됩니다 그러나 self._build_url  (괄호없이).

관련 자료

  • 이전 node.js - connectionerror - {데이터베이스 서버}에 연결하지 못했습니다 :연결할 수 없습니다 (시퀀스)
  • 다음 Spring Framework의로드 시간 제직이 제대로 로깅되지 않음