我经常遇到这样的情况:
import os
for i in range(10):
os.mkdir(i)
Run Code Online (Sandbox Code Playgroud)
但是,有时一个目录已经存在,在这种情况下,os.mkdir会抛出一个OSError.当发生这种情况时,我只是希望它跳过循环的其余部分并移动到i的下一次迭代,所以我经常写这样的东西:
for i in range(10):
try:
os.mkdir(i)
except OSError:
continue
Run Code Online (Sandbox Code Playgroud)
但是,我真正想要的是一个封装该行为的函数.像这样的东西:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
continue
Run Code Online (Sandbox Code Playgroud)
所以我可以有这样的代码:
for i in range(10):
custom_mkdir(i)
Run Code Online (Sandbox Code Playgroud)
具有预期的行为,如果目录不存在,它会跳转到for循环的下一个交互,如果它存在的话.
但是,continue语句不能以这种方式包含在函数中.那么如何在不诉诸的情况下获得预期的行为:
for i in range(10):
try:
custom_mkdir(i)
except OSError:
continue
Run Code Online (Sandbox Code Playgroud)
哪个比第一个更糟?
好吧,如果循环内部没有其他内容,你可以这样做:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
pass
for i in range(10):
custom_mkdir(i)
Run Code Online (Sandbox Code Playgroud)
如果下面有更多的代码custom_mkdir,我认为你能做的最好的是:
def custom_mkdir(directory):
try:
os.mkdir(directory)
return True
except OSError:
return False
for i in range(10):
if not custom_mkdir(i):
continue
Run Code Online (Sandbox Code Playgroud)
要么
for i in range(10):
if custom_mkdir(i):
# The rest of the logic in here
Run Code Online (Sandbox Code Playgroud)
至少比原作简洁一点.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |