Python 2.7 (Python)搁置+;try:如何搜索一个键并在它不存在时设置它';t是否存在而没有重复代码?
要永久存储用户工作文件夹,我使用shelve。为了知道用户是否配置了文件夹,我使用了3次类似的代码:Python 2.7 (Python)搁置+;try:如何搜索一个键并在它不存在时设置它';t是否存在而没有重复代码?,python-2.7,try-catch,shelve,Python 2.7,Try Catch,Shelve,要永久存储用户工作文件夹,我使用shelve。为了知道用户是否配置了文件夹,我使用了3次类似的代码: pastaUsuario = os.getenv('HOMEDRIVE') + os.getenv('HOMEPATH') pastaPrincipal = pastaUsuario + '\\rev' pastaConfig = pastaPrincipal + '\\config' config = shelve.open(pastaConfig + '\\config.db') try:
pastaUsuario = os.getenv('HOMEDRIVE') + os.getenv('HOMEPATH')
pastaPrincipal = pastaUsuario + '\\rev'
pastaConfig = pastaPrincipal + '\\config'
config = shelve.open(pastaConfig + '\\config.db')
try:
pastaIsometricosSpooler = config['pastaIsometricosSpooler']
except Exception:
config['pastaIsometricoSpooler'] = raw_input('Digite o caminho da pasta de extração do Spooler: ')
pastaIsometricosSpooler = config['pastaIsometricosSpooler']
finally:
config.close()
config = shelve.open(pastaConfig + '\\config.db')
try:
ultimoIso = config['ultimoIso']
except Exception:
config['ultimoIso'] = raw_input('Digite o tag do isométrico a ser revisado: ')
ultimoIso = config['ultimoIso']
finally:
config.close()
config = shelve.open(pastaConfig + '\\config.db')
try:
ultimaRev = config['ultimaRev']
except Exception:
config['ultimaRev'] = raw_input('Digite a nova revisão: ')
ultimaRev = config['ultimaRev']
finally:
config.close()
如何避免重复几乎相同的代码?
我尝试使用“for”语句来列出:
config = shelve.open(pastaConfig + '\\config.db')
for x in ['pastaIsometricosSpooler', 'ultimoIso', 'ultimaRev']:
try:
x = config[x]
except Exception:
config[x] = raw_input()
x = config[x]
finally:
config.close()
但是变量集由于引号而无法工作(例如:'ultimaRev'=config['ultimaRev'])
对不起,我的英语不好 最好使用函数,而不是让相同的代码在循环中工作。调整您所拥有的:
def getconfig( x, prompt ):
try:
theconf= config[x]
except Exception:
config[x] = raw_input( prompt )
theconf= config[x]
return theconf
然后您可以使用它三次:
config = shelve.open(pastaConfig + '\\config.db')
ultimaRev = getconfig( 'ultimaRev', 'Digite a nova revisão: ')
ultimoIso = getconfig( 'ultimoIso', 'Digite o tag do' )
pastaIsometricosSpooler = getconfig('pastaIsometricosSpooler', 'Digite o caminho da' )
config.close()