跳过数据不可用网页的条件

Condition for skipping web page where data is not available

我正在尝试从“http://weather.uwyo.edu/upperair/sounding.html”网站获取数据。我写了以下脚本,但问题是给定站点中的某些站点没有任何数据。所以它给出的错误是“AttributeError:'NoneType' object has no attribute 'text'”。我想写一些条件,以便在没有数据的地方它应该跳过那个站并去下一站。

尝试: 对于站内站:

    year = '2017'
    month = '08'
    day = '14'
    hour = '00'
    end = '12'

url = requests.get('http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn))

webbrowser.open('http://weather.uwyo.edu/cgi-bin/sounding?region=seasia&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn ))

soup = BeautifulSoup(url.text,'html.parser')
data_box = soup.find('pre')
data = data_box.text.strip()
print (data)

属性错误除外: 打印("No data available for station",属性错误)

import sys
import webbrowser
import urllib3
import requests
import lxml.html as lh
import pandas as pd
from time import sleep
from bs4 import BeautifulSoup
import csv

station =[42647,42101]       # [42101] #,42647,42971,43371]

try:
    for stn in station:

        year = '2017'
        month = '08'
        day = '14'
        hour = '00'
        end = '12'

    url = requests.get('http://weather.uwyo.edu/cgi-bin/sounding?region=naconf&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn))

webbrowser.open('http://weather.uwyo.edu/cgi-bin/sounding?region=seasia&TYPE=TEXT%3ALIST&YEAR='+year+'&MONTH='+month+'&FROM='+day+hour+'&TO='+day+end+'&STNM='+str(stn ))

  soup = BeautifulSoup(url.text,'html.parser')
  data_box = soup.find('pre')
  data = data_box.text.strip()
 except AttributeError :
        print("No data available for  station", AttributeError)
    print (data)

我希望它应该通过跳过数据不存在的站来打印数据可用站的数据 available.But 输出是: 没有可用于电台的数据 追溯(最近一次通话): 文件 "sound.py",第 30 行,位于 数据 = data_box.text.strip() AttributeError: 'NoneType' 对象没有属性 'text'

您的异常处理范围有误;异常冒泡并在 outside for 循环中被捕获,因此 for 循环此时已经退出。

您需要在您认为可能在 for 循环内引发异常的地方设置 try-except,即选择最小范围:

for stn in station:
    ...
    try:
        data = data_box.text.strip()
     except AttributeError :
        print("No data available for  station", AttributeError)
        continue  # move onto next station