سؤال

I am having trouble with the following code:

import praw
import argparse

# argument handling was here

def main():
    r = praw.Reddit(user_agent='Python Reddit Image Grabber v0.1')
    for i in range(len(args.subreddits)):
        try:
            r.get_subreddit(args.subreddits[i]) # test to see if the subreddit is valid
        except:
            print "Invalid subreddit"
        else:
            submissions = r.get_subreddit(args.subreddits[i]).get_hot(limit=100)
            print [str(x) for x in submissions]

if __name__ == '__main__':
    main()

subreddit names are taken as arguments to the program.

When an invalid args.subreddits is passed to get_subreddit, it throws an exception which should be caught in the above code.

When a valid args.subreddit name is given as an argument, the program runs fine.

But when an invalid args.subreddit name is given, the exception is not thrown, and instead the following uncaught exception is outputted.

Traceback (most recent call last):
  File "./pyrig.py", line 33, in <module>
    main()
  File "./pyrig.py", line 30, in main
    print [str(x) for x in submissions]
  File "/usr/local/lib/python2.7/dist-packages/praw/__init__.py", line 434, in get_content
    page_data = self.request_json(url, params=params)
  File "/usr/local/lib/python2.7/dist-packages/praw/decorators.py", line 95, in wrapped
    return_value = function(reddit_session, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/praw/__init__.py", line 469, in request_json
    response = self._request(url, params, data)
  File "/usr/local/lib/python2.7/dist-packages/praw/__init__.py", line 342, in _request
    response = handle_redirect()
  File "/usr/local/lib/python2.7/dist-packages/praw/__init__.py", line 316, in handle_redirect
    url = _raise_redirect_exceptions(response)
  File "/usr/local/lib/python2.7/dist-packages/praw/internal.py", line 165, in _raise_redirect_exceptions
    .format(subreddit))
praw.errors.InvalidSubreddit: `soccersdsd` is not a valid subreddit

I can't tell what I am doing wrong. I have also tried rewriting the exception code as

except praw.errors.InvalidSubreddit:

which also does not work.

EDIT: exception info for Praw can be found here

هل كانت مفيدة؟

المحلول

File "./pyrig.py", line 30, in main
  print [str(x) for x in submissions]

The problem, as your traceback indicates is that the exception doesn't occur when you call get_subreddit In fact, it also doesn't occur when you call get_hot. The first is a lazy invocation that just creates a dummy Subreddit object but doesn't do anything with it. The second, is a generator that doesn't make any requests until you actually try to iterate over it.

Thus you need to move the exception handling code around your print statement (line 30) which is where the request is actually made that results in the exception.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top