python尝试和异常

python尝试和异常,python,Python,我不是一个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"

我不是一个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
为了在脚本端迭代到第二天,我必须使用另一个try/except块处理函数中的none情况:

#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
#一些代码
对于范围内的年数(最小年数,最大年数+1):
天=1

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

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
#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
如果两个站点上都没有数据,您可以为变量
st
指定任意值,或直接从函数返回

这就是你要找的吗? 此外,您不应该只编写
except
,而不指定您期望的异常类型-查看此处了解更多信息:

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

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

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
#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):
天=1

而day为什么不为它创建一个单独的函数呢

def getdata(X):
对于[site1,site2]中的站点:#可能更多
尝试:
使用_X()从_站点_返回获取_数据_
除:
打印“在%s%站点中不可用”
打印“在任何地方都找不到数据”
然后
getsom
变成:

def getsom(X):
#一些代码
st=getdata(X)
#一些依赖于st的代码

所以,在
try/except
中的
except
块中包装代码……想知道为什么我在不到一分钟的时间内就被否决了4分。@ForceBru。。。谢谢你的建议,我试过了,但似乎没有成功。您能举个例子吗
getsom
的代码几乎可以。您将
st=get-data-from-site 1
包装在
try/except
构造中,因此您应该使用
st=get-data-from-site 2
。当前答案是正确的。这应该有效,但使用try…除了。。。根据PEP8,在另一次尝试中不推荐使用。@grael。。。谢谢大家的快速回复。当内部try/except设置为return时,该函数工作正常,但脚本不会转到第二天,而是以“TypeError:“NoneType”对象不可iterable”退出。当st设置为None(或其他arb.variable)时,try/except块下面的函数的其他依赖部分将分解,因为找不到任何数据。@grael。。。非常感谢,我对你的想法做了一点修改,它成功了!这只是一段很长的多功能代码的一部分。检查编辑以查找最终版本。@David Page。。。感谢David提出的最佳实践建议!