python尝试和异常
我不是一个python极客,但我尝试使用类似问题的多个答案中的信息来解决这个问题,但在我的案例中似乎没有一个真正起作用。这是: 我正在从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"
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提出的最佳实践建议!