【问题标题】:Python try except fail to catch RemoteDataErrorPython尝试除了无法捕获RemoteDataError
【发布时间】:2017-04-01 18:09:04
【问题描述】:

我正在使用以下代码从 nasdaq 下载的符号列表中读取来自 yahoo Finance 的数据。

pnls = {i:dreader.DataReader(i,'yahoo','1985-01-01','2017-03-30') for i in symbols}

for df_name in pnls:
    try: 
        pnls.get(df_name).to_csv("/Users/Jiong/Documents/data/{}_data.csv".format(df_name), index=True, header=True)
    except: 
        print("error {}".format(df_name))
    else: 
        print("done {}".format(df_name))  

猜测某些符号可能无效,雅虎财经抛出 RemoteDataError Exception

上面的代码应该继续运行,但它仍然在错误处停止。

难道不是要捕获所有异常吗?或者这是运行时错误?

无论如何要让代码忽略它并继续?谢谢。查看下面运行的错误

118         if params is not None and len(params) > 0:
119             url = url + "?" + urlencode(params)
--> 120         raise RemoteDataError('Unable to read URL: {0}'.format(url))
121 
122     def _read_lines(self, out):

RemoteDataError: Unable to read URL: http://ichart.finance.yahoo.com/table.csv?c=1985&f=2017&s=MITT%5EA&g=d&ignore=.csv&d=2&e=30&a=0&b=1

【问题讨论】:

    标签: python try-catch yahoo-finance except


    【解决方案1】:

    您需要处理引发异常,否则它将在引发的地方停止。所以,如果一个 raise 异常没有被捕获和处理,它就会被中断。

    你需要的是这样的:

    except RemoteDataError as exp : 
        print('Unable to read URL: {0}'.format(url))
    

    有关错误的更多详细信息,您可以参考this documentation

    【讨论】:

    • 谢谢!它仍然会引发错误。我看了 exceet without exception name will catch all exceptions.
    • 是的,但抑制所有异常并不是一个好习惯。首先通过删除 try-catch 块来识别正确的名称,并且只将必要的名称放入 except。
    • 知道为什么即使处理了异常它仍然停止?这是因为它是运行时错误吗?
    • 运行时通过它处理。通过删除 try-except 块检查错误名称是否正确。
    • 如果我使用 catch all 语法,是不是应该继续?
    【解决方案2】:

    从另一个页面获取此导入;它似乎为我纠正了这个问题。我在尝试从雅虎提取股票数据时遇到远程错误。在添加 RemoteDataError 异常之前,您需要执行以下导入:

    from pandas_datareader._utils import RemoteDataError
    
    df_ = pd.DataFrame()
    for i in assets:
        print(i)
        try:
            vec = web.DataReader(i, 'yahoo', start='12/10/2006', end='2/1/2007')
            vec['asset'] = i
            vec['returns_close_raw'] = np.log(vec.Close/vec.Close.shift())
            vec['returns_open_raw'] = np.log(vec.Open/vec.Open.shift())
            vec['returns_open_raw10'] = np.log(vec.Open/vec.Open.shift(10))
            vec['returns_close_raw10'] = np.log(vec.Close/vec.Close.shift(10))
            df_ = pd.concat([df_, vec])
    
        except RemoteDataError:
            print('remote error')
    
        except KeyError:
            print('key error')
    
    
    

    【讨论】:

    • 请尝试多解释一下您的代码的作用。
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 2014-08-22
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    相关资源
    最近更新 更多