Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 (Python)搁置+;try:如何搜索一个键并在它不存在时设置它';t是否存在而没有重复代码?_Python 2.7_Try Catch_Shelve - Fatal编程技术网

Python 2.7 (Python)搁置+;try:如何搜索一个键并在它不存在时设置它';t是否存在而没有重复代码?

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:

要永久存储用户工作文件夹,我使用shelve。为了知道用户是否配置了文件夹,我使用了3次类似的代码:

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()