2017-01-21 4 views
-2

Я пытаюсь отформатировать некоторый текст, используя модуль textwrap в python. По какой-то причине он говорит, что «объект типа int не имеет len()», и я не могу понять, почему. Это должно быть то, что я использую неправильно или что-то, что я делаю в неправильном порядке. Заранее спасибо.Ошибка модуля TextWrapper

Вот мой код, а не изображение.

импорт запросы JSON импорт импорт TextWrap

представляет собой модуль, который можно использовать, чтобы захватить информацию о фильме

с использованием OMDB (Open Database Movie).

класс MovieFinder():

def LookupMovie(self, movieName): 
    if not movieName: 
     return 

    #Grab the formatted query string 
    query = self.GetFormattedSearchQuery(movieName) 
    #Make the request 
    r = requests.get(query) 
    #Grab the json data 
    jsonInfo = r.json() 
    #Pull out all of the relevant information 
    searchResults = jsonInfo['Search'] 

    for movie in searchResults: 
     movieQuery = self.GetFormattedTitleQuery(movie['Title']) 
     response = requests.get(movieQuery) 
     jsonInfo = response.json() 

     movieResult = Result(jsonInfo['Title'], jsonInfo['Year'], 
          jsonInfo['Rated'], jsonInfo['Plot'], 
          jsonInfo['Released'], jsonInfo['Runtime']) 
     self._results.append(movieResult) 


def GetFormattedSearchQuery(self, movieName): 
    movie = 's=' + movieName 

    formattedQuery = self.queryString + movie 
    return formattedQuery 

def GetFormattedTitleQuery(self, movieName): 
    movie = 't=' + movieName.replace(" ", "+") 
    year = '&y=' 
    plot = '&plot=short' 
    responseType = '&r=json' 

    formattedQuery = self.queryString + movie + year + plot + responseType 
    return formattedQuery 

def GetResults(self): 
    return self._results  

def __init__(self): 
    self.queryString = 'http://www.omdbapi.com/?' 
    self._results = [] 

класс Результат():

def getTitle(self): 
    return self._title 

def getYear(self): 
    return self._year 

def getRating(self): 
    return self._rating 

def getPlot(self): 
    return self._plot 

def getReleaseDate(self): 
    return self._releaseDate 

def getRuntime(self): 
    return self._runtime 

def printInfo(self): 
    print ('Title  : ' + self.getTitle()) 
    print ('Year   : ' + self.getYear()) 
    print ('Release Date : ' + self.getReleaseDate()) 
    print ('Runtime  : ' + self.getRuntime()) 
    print ('Rating  : ' + self.getRating()) 
    wrapper = textwrap.TextWrapper() 
    wrapper.subsequent_indent = 16 
    plotLine = 'Plot   : ' + self.getPlot() 
    lines = wrapper.fill(plotLine) 

    for line in lines: 
     print(line) 

    print ('---------------------------------------') 

def __init__(self, title, year, rating, plot, releaseDate, runtime): 
    self._title = title 
    self._year = year 
    self._rating = rating 
    self._plot = plot 
    self._releaseDate = releaseDate 
    self._runtime = runtime 
+2

А что такое 'getPlot'? – TigerhawkT3

+0

Подсказка: 'textwrap' предназначен для обтекания _strings_ текста. Поэтому вам нужно убедиться, что вы передадите ему строку. –

+0

См. [Почему я не могу загружать изображения с кодом на SO при задании вопроса?] (Http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code -on-so-when-ask-a-question) –

ответ

0

Я понял, что был неправ. Проблема заключалась в том, что для модуля TextWrapper используется флаг «next_indent». Это должно быть строка, а не число для отступов.