我理解这个结构是如何工作的:
for i in range(10):
print(i)
if i == 9:
print("Too big - I'm giving up!")
break;
else:
print("Completed successfully")
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么else在这里用作关键字,因为它表明有问题的代码仅在for块未完成时运行,这与它的作用相反!无论我如何看待它,我的大脑都无法从for语句无缝地进展到else块.对我来说,continue或者continuewith更有意义(我正在努力训练自己阅读它).
我想知道Python编码器如何在他们的脑海中读取这个结构(或者如果你愿意的话,大声朗读).也许我错过了一些会让这些代码块更容易破译的东西?
我有一个循环开始for i in range(0, 100).通常它运行正常,但有时它会因网络状况而失败.目前我设置它以便在失败时,它将continue在except子句中(继续到下一个数字i).
我是否可以重新分配相同的数字i并再次运行循环的失败迭代?
当urllib2.request到达超时,一个urllib2.URLError异常.重试建立连接的pythonic方法是什么?
我喜欢避免"在你跳跃之前"的范例,因为我重视易于阅读的代码.在某些情况下,我无法预测是否会发生错误,例如资源可用性或内存不足错误.我还没有找到一种干净的方式来编写重复或冗长的代码来处理这些场景.
以下示例略有可读性,但重复代码是不可接受的.
try:
myobject.write(filename)
except OSError:
if prompt("%s is in use by another application." +
"Close that application and try again.") == "Try again":
myobject.write(filename) #repeated code
Run Code Online (Sandbox Code Playgroud)
为了删除重复的代码,我必须添加更多行并缩进所有内容,从而降低可读性.
success = False
while not success:
try:
myobject.write(filename)
success = True
except OSError:
if prompt("%s is in use by another application." +
"Close that application and try again.") != "Try again":
break
Run Code Online (Sandbox Code Playgroud)
有没有一种更短的方式在Python中写这个不重复代码?
前段时间,我需要retryR中的一个函数来处理缓慢的服务器响应.该函数将具有以下行为:(尝试操作(函数或方法),如果失败,请稍等一下,然后重试)x10
我想出了以下内容:
retry <- function(fun, max_trys = 10, init = 0){
suppressWarnings(tryCatch({
Sys.sleep(0.3);
if(init<max_trys) {fun}
}, error=function(e){retry(fun, max_trys, init = init+1)}))}
Run Code Online (Sandbox Code Playgroud)
它运作良好.现在我在Python3中需要相同的东西,所以我尝试制作相同的代码:
import time
def retry_fun(fun, max_trys = 10, init=0):
try:
time.sleep(0.3)
if(init<max_trys):
fun
except:
retry_fun(fun, max_trys, init = init+1)
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,它会崩溃我的内核.由于我是Python的初学者,我不确定是什么导致了崩溃,以及函数是否/如何作为参数传递到另一个函数.
你能救我吗?
我在Python2.7写的,遇到如下情况。我想尝试调用一个函数三次。如果所有 3 次都引发错误,我将引发我得到的最后一个错误。如果任何一个调用成功,我将停止尝试并立即继续。
这是我现在所拥有的:
output = None
error = None
for _e in range(3):
error = None
try:
print 'trial %d!' % (_e + 1)
output = trial_function()
except Exception as e:
error = e
if error is None:
break
if error is not None:
raise error
Run Code Online (Sandbox Code Playgroud)
是否有更好的片段可以实现相同的用例?
我想test在发现这样的异常时多次执行一个函数
try:
test()
except:
try:
test()
except:
try:
test()
except Exception,e:
logger.info(e)
Run Code Online (Sandbox Code Playgroud)
这种情况下,当我请求一个url并获取url响应时,
因为当你只请求一次时,目标Web服务器可能会响应一些不良数据,
那么这么多单词要做到这一点,而不是pythonic实现
是否有一些pythonic样式来执行此操作?
python ×7
decorator ×1
exception ×1
for-else ×1
for-loop ×1
if-statement ×1
loops ×1
python-3.x ×1
retry-logic ×1
try-catch ×1
try-except ×1
urllib2 ×1