3

私は Python である程度の経験がありますが、正式なトレーニングが不足しているため、try & except 関数を使用してエラーを検出したことはありません。

ウィキペディアからいくつかの記事を抽出する作業を行っています。このために、私はタイトルの配列を持っていますが、そのうちのいくつかは最後に記事や検索結果がありません. ページ取得機能でこれらのいくつかの名前をスキップして、残りのスクリプトを実行し続けたいと思います。再現可能なコードは次のとおりです。

import wikipedia
# This one works.
links = ["CPython"]
test = [wikipedia.page(link, auto_suggest=False) for link in links]
test = [testitem.content for testitem in test]
print(test)

#The sequence breaks down if there is no wikipedia page.
links = ["CPython","no page"]
test = [wikipedia.page(link, auto_suggest=False) for link in links]
test = [testitem.content for testitem in test]
print(test)

それを実行するライブラリは、このような方法を使用します。通常、これは非常に悪い習慣ですが、これは 1 回限りのデータ抽出のためのものであるため、ライブラリのローカル コピーを変更して機能させたいと考えています。編集私は今完全な機能を含めました。

def page(title=None, pageid=None, auto_suggest=True, redirect=True, preload=False):
  '''
  Get a WikipediaPage object for the page with title `title` or the pageid
  `pageid` (mutually exclusive).

  Keyword arguments:

  * title - the title of the page to load
  * pageid - the numeric pageid of the page to load
  * auto_suggest - let Wikipedia find a valid page title for the query
  * redirect - allow redirection without raising RedirectError
  * preload - load content, summary, images, references, and links during initialization
  '''
  if title is not None:
    if auto_suggest:
      results, suggestion = search(title, results=1, suggestion=True)
      try:
        title = suggestion or results[0]
      except IndexError:
        # if there is no suggestion or search results, the page doesn't exist
        raise PageError(title)
    return WikipediaPage(title, redirect=redirect, preload=preload)
  elif pageid is not None:
    return WikipediaPage(pageid=pageid, preload=preload)
  else:
    raise ValueError("Either a title or a pageid must be specified")

エラーが発生しないページだけを取得するにはどうすればよいですか。このエラーまたは何らかのエラーを引き起こすリスト内のすべての項目を除外する方法があるかもしれません。存在しないページでは、「NA」などを返すことで問題ありません。予告なしにそれらをスキップしても問題ありません。ありがとう!

4

2 に答える 2

2

これは悪い習慣になることを理解してください。ただし、1 回限りの迅速で汚いスクリプトの場合は、次のことができます。

編集:待って、ごめんなさい。リスト内包表記に気付きました。これを分解せずにこれが機能するかどうかは実際にはわかりません:

links = ["CPython", "no page"]
test = []
for link in links:
    try:
        page = wikipedia.page(link, auto_suggest=False)
        test.append(page)
    except wikipedia.exceptions.PageError:
        pass
test = [testitem.content for testitem in test]
print(test)

pass基本的にあなたを信頼し、エラーを無視して、ほぼその日を続行できるようにpythonに指示します。

于 2015-11-24T15:24:10.733 に答える