Обработка ошибок в скриптах Python - PullRequest
1 голос
/ 03 октября 2010

Используя pyblog.py , я получил следующую ошибку, которую я затем попытался более изящно обработать:

Traceback (most recent call last):
  File "C:\Python26\Lib\SITE-P~1\PYTHON~1\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "C:\Documents and Settings\mmorisy\Desktop\My Dropbox\python\betterblogmaster.py", line 11, in <module>
    date = blogurl.get_recent_posts(1)[0]['dateCreated']
  File "C:\Documents and Settings\mmorisy\Desktop\My Dropbox\python\pyblog.py", line 129, in get_recent_posts
    return self.execute('metaWeblog.getRecentPosts', blogid, self.username, self.password, numposts)
  File "C:\Documents and Settings\mmorisy\Desktop\My Dropbox\python\pyblog.py", line 93, in execute
    raise BlogError(fault.faultString)
BlogError: XML-RPC services are disabled on this blog.  An admin user can enable them at http://example.com/blogname/wp-admin/options-writing.php
>>> 

Поэтому я попытался выполнить следующий код, не прерывая работу сценария:

for blog in bloglist:
    try:
        blogurl = pyblog.WordPress('http://example.com' + blog + 'xmlrpc.php', 'admin', 'laxbro24')
        date = blogurl.get_recent_posts(1)[0]['dateCreated']
        print blog + ', ' + str(date.timetuple().tm_mon) + '/' + str(date.timetuple().tm_mday) + '/' + str(date.timetuple().tm_year)
    except BlogError:
        print "Oops! The blog at " + blogurl + " is not configured properly."

Только для получения следующей ошибки:

Traceback (most recent call last):
  File "C:\Python26\Lib\SITE-P~1\PYTHON~1\pywin\framework\scriptutils.py", line 325, in RunScript
    exec codeObject in __main__.__dict__
  File "C:\Documents and Settings\mmorisy\Desktop\My Dropbox\python\betterblogmaster.py", line 13, in <module>
    except BlogError:
NameError: name 'BlogError' is not defined

Разве ошибка в блоге имен не определена PyBlog, так как именно там я и получил это имя?Я использую «кроме» неправильно?Спасибо за любые советы!

Ответы [ 3 ]

5 голосов
/ 03 октября 2010

Да, он использует BlogError, но вы не импортировали BlogError в свое пространство имен для ссылки.Вместо этого вы хотите использовать pyblog.BlogError:

for blog in bloglist:
    try:
        blogurl = pyblog.WordPress('http://example.com' + blog + 'xmlrpc.php', 'admin', 'laxbro24')
        date = blogurl.get_recent_posts(1)[0]['dateCreated']
        print blog + ', ' + str(date.timetuple().tm_mon) + '/' + str(date.timetuple().tm_mday) + '/' + str(date.timetuple().tm_year)
    except pyblog.BlogError:
        print "Oops! The blog at " + blogurl + " is not configured properly."

Помните, что исключения следуют тем же правилам области действия, что и любой объект python.

2 голосов
/ 03 октября 2010

код будет

 from pyblog import BlogError
2 голосов
/ 03 октября 2010

Ваш except синтаксически правильный. И все же это дает сбой, потому что вы явно не импортировали класс исключений BlogError в пространство имен вашей программы.

Чтобы это исправить, импортируйте класс BlogError. Например,

from pyblog import BlogError
try:
    ...
except BlogError:
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...