给出以下代码(不起作用):
while True:
#snip: print out current state
while True:
ok = get_input("Is this ok? (y/n)")
if ok.lower() == "y": break 2 #this doesn't work :(
if ok.lower() == "n": break
#do more processing with menus and stuff
Run Code Online (Sandbox Code Playgroud)
有没有办法让这项工作?或者我是否已经做了一次检查以突破输入循环,然后另一个更有限的检查外部循环以在用户满意的情况下将所有内容分开?
Edit-FYI: get_input是我编写的一个简短函数,支持显示提示和默认值以及所有那些幻想和返回__CODE__
我注意到以下代码在Python中是合法的.我的问题是为什么?有具体原因吗?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何在Python中打破多个循环?
是否有一种更容易的方法来打破嵌套循环而不是抛出异常?(在Perl中,您可以为每个循环指定标签,并至少继续外循环.)
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
"break both loops"
Run Code Online (Sandbox Code Playgroud)
也就是说,有一个更好的方式:
class BreakIt(Exception): pass
try:
for x in range(10):
for y in range(10):
print x*y
if x*y > 50:
raise BreakIt
except BreakIt:
pass
Run Code Online (Sandbox Code Playgroud) 许多Python程序员可能没有意识到while循环和for循环的语法包含一个可选else:子句:
for val in iterable:
do_something(val)
else:
clean_up()
Run Code Online (Sandbox Code Playgroud)
该else子句的主体是某些清理操作的好地方,并且在循环的正常终止时执行:即,退出循环return或break跳过该else子句; continue执行后退出.我知道这只是因为我只是看着它(再次),因为我永远记得当该else子句被执行.
总是?关于循环的"失败",顾名思义?定期终止?即使循环退出return?如果不抬头,我永远无法完全确定.
我责怪我对关键词选择的持续存在的不确定性:我发现else这种语义非常缺乏统一性.我的问题不是"为什么这个关键字用于此目的"(我可能会投票关闭,但只有在阅读了答案和评论后),但我怎么能想到else关键字,以便它的语义有意义,我因此能记得吗?
我确信对此有相当多的讨论,我可以想象选择是为了与try语句的else:条款(我也必须查找)保持一致,并且目标是不添加到列表中Python的保留字.也许选择的理由else将澄清其功能并使其更令人难忘,但我将名称与功能联系起来,而不是在历史解释本身之后.
这个问题的答案,我的问题简要地作为副本被关闭,包含了很多有趣的背景故事.我的问题有一个不同的焦点(如何连接else关键字选择的特定语义),但我觉得应该有一个链接到这个问题的某个地方.
我想知道对for循环中的最后一个元素进行特殊处理的最佳方法(更紧凑和"pythonic"方式).有一段代码只能在元素之间调用,在最后一个元素中被抑制.
以下是我目前的工作方式:
for i, data in enumerate(data_list):
code_that_is_done_for_every_element
if i != len(data_list) - 1:
code_that_is_done_between_elements
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法?
注意:我不想使用hacks,例如使用reduce;)
我有一个python脚本,它在共享的linux主机上查询MySQL服务器.出于某种原因,对MySQL的查询通常会返回"服务器已经消失"错误:
_mysql_exceptions.OperationalError: (2006, 'MySQL server has gone away')
Run Code Online (Sandbox Code Playgroud)
如果您之后立即再次尝试查询,它通常会成功.所以,我想知道在python中是否有一种合理的方法来尝试执行查询,如果它失败了,再试一次,最多可以尝试一定数量的尝试.可能我希望它在放弃之前尝试5次.
这是我的代码类型:
conn = MySQLdb.connect(host, user, password, database)
cursor = conn.cursor()
try:
cursor.execute(query)
rows = cursor.fetchall()
for row in rows:
# do something with the data
except MySQLdb.Error, e:
print "MySQL Error %d: %s" % (e.args[0], e.args[1])
Run Code Online (Sandbox Code Playgroud)
显然,我可以通过在except子句中再次尝试来做到这一点,但这非常难看,我觉得必须有一个体面的方法来实现这一点.
我是Python的初学者.我发现"for-else"和"while-else"中的"else"完全没必要.因为"for"和"while"最终将运行到"else",我们可以使用通常的行代替.
例如:
for i in range(1, 5):
print i
else:
print 'over'
Run Code Online (Sandbox Code Playgroud)
和
for i in range(1, 5):
print i
print 'over'
Run Code Online (Sandbox Code Playgroud)
是相同的.
那么为什么Python在"for-else"和"while-else"中有"else"?
我试图将一个字符串附加到文件,如果该字符串没有在文件中退出.但是,打开带有a+选项的文件不允许我立即执行,因为打开文件a+会将指针放到文件的末尾,这意味着我的搜索将始终失败.有没有什么好的方法可以做到这一点,除了打开文件先读取,关闭再打开附加?
在代码中,显然,下面不起作用.
file = open("fileName", "a+")
Run Code Online (Sandbox Code Playgroud)
我需要做以下才能实现它.
file = open("fileName", "r")
... check if a string exist in the file
file.close()
... if the string doesn't exist in the file
file = open("fileName", "a")
file.write("a string")
file.close()
Run Code Online (Sandbox Code Playgroud) 我几乎没有注意到在for循环中使用else的python程序.
我最近使用它在退出时根据循环变量条件执行操作; 因为它在范围内.
在for循环中使用else的pythonic方法是什么?有没有值得注意的用例?
而且,是的.我不喜欢使用break语句.我宁愿将循环条件设置为复杂的.如果我不喜欢使用break语句,我能从中获得任何好处吗?
值得注意的是,自语言开始以来,for循环有一个else,这是第一个版本.
python ×10
for-loop ×3
loops ×2
while-loop ×2
break ×1
control-flow ×1
fencepost ×1
goto ×1
idioms ×1
if-statement ×1
python-3.x ×1
syntax ×1