python尝试和例外

时间:2016-08-22 08:28:38

标签: python

我不是一个蟒蛇怪,但试图使用来自类似问题的几个答案的信息来解决这个问题,但似乎没有一个真正起作用。这是:

我从python脚本调用函数: 这是功能:

def getsom(X):
    #some codes
    try:
        st = get data from site 1 using X
    except:
        print "not available from site 1, getting from site 2"
        st = get data from site 2 using X

    #some codes that depend on st

我从python脚本中调用它:

#some codes
for yr in range(min_yr,max_yr+1):
    day=1
    while day<max_day:
        st1 = getsom(X)
        #some code that depends on st1
        day+=1

当特定日期的网站1或2上的数据可用时,此方法可以正常工作,但如果在另一天的两个网站上都不可用,则会发生故障。

如果两个站点的特定日期数据不可用,我希望能够检查第二天。我已经尝试了不同的try配置,但没有成功,并希望以最有效的方式获得任何帮助。

谢谢!

***编辑 最终版本有效:

在功能部分:

def getsom(X):
    #some codes
    try:
        st = get data from site 1 using X
    except:
        print "not available from site 1, getting from site 2"
        st = get data from site 2 using X

        try:
           st = get data from site 2 using X
        except:
           print "data not available from sites 1 and 2"
           st=None
    if st is not None:
        #some codes that depend on st

为了在脚本端迭代到第二天,我必须使用另一个try / except块处理该函数的无案例:

#some codes
for yr in range(min_yr,max_yr+1):
    day=1
    while day<max_day:


   try:
       st=getsom(X)
   except:
       st=None

    if st is not None:
       #some codes that depend

2 个答案:

答案 0 :(得分:2)

如评论中所述,您似乎希望在第一级异常处理程序中捕获异常。你可以这样做:

def getsom(X):
    #some codes
    try:
        st = get data from site 1 using X
    except:
        print "not available from site 1, getting from site 2"
        try:
             st = get data from site 2 using X
        except:
             print "Not available from site 2 as well."
             # Here you can assign some arbitrary value to your variable (like None for example) or return from function.

    #some codes that depend on st

如果两个网站上都没有数据,您可以为变量st分配一些任意值,或者只是从函数返回。

这是你在找什么? 此外,您不应该简单地编写except而不指定您期望的异常类型 - 请点击此处获取更多信息:Should I always specify an exception type in `except` statements?

编辑以在评论中回答问题:

如果您没有关于某一天的数据,您可以return None并按照以下方式处理:

#some codes
for yr in range(min_yr,max_yr+1):
    day=1
    while day<max_day:
        st1 = getsom(X)
        if st1 is not None:
            #some code that depends on st1
        day+=1

答案 1 :(得分:0)

为什么不为它创建单独的功能?

def getdata(X):
    for site in [site1, site2]:  # possibly more
        try:
            return get_data_from_site_using_X()
        except:
            print "not available in %s" % site
    print "couldn't find data anywhere"

然后getsom成为:

def getsom(X):
    #some codes
    st = getdata(X)
    #some codes that depend on st