Search code examples
pythonpandasstringfunctionpandasql

function returning a 'none' type instead of string?


I have this function:

def sentiment_review(query, maxresults):
   .
   .
   .
   positive_tweets = pds.sqldf("select count(sentiment)as n from df where sentiment = 
   'POSITIVE'")['n'].iloc[0]
   negative_tweets = pds.sqldf("select count(sentiment)as n from df where sentiment = 
   'NEGATIVE'")['n'].iloc[0]
   return print("there were {} negative tweets and {} positive tweets about 
   {}".format(negative_tweets, positive_tweets, query))

now, when I try type(sentiment_review('turtles', 50)), it returns NoneType. why is the type returned not a string? even when I try return str("there were {} negative tweets and {} positive tweets about {}".format(negative_tweets, positive_tweets, query)), the result is the same.


Solution

  • print() itself is a function, which doesn't return anything. If you want to return a string, do just that without the print:

    def sentiment_review(query, maxresults):
       ...
       # return a string, without printing to standard out
       return "there were {} negative tweets and {} positive tweets about {}".format(
              negative_tweets, positive_tweets, query)
    

    Otherwise, if you want to print, do so without a return

    def sentiment_review(query, maxresults):
       ...
       # print, no return
       # (A function without a return effectively returns None anyway.)
       print("there were {} negative tweets and {} positive tweets about {}".format(
             negative_tweets, positive_tweets, query))