在函数中引用全局变量的问题

时间:2018-08-22 15:42:11

标签: python error-handling

这是我昨天在这里What is the best way to validate user input against the contents of a list?问的一个问题。我使用这样的函数得到了一个很好的建议:

getuser = input("Please enter your username :")

print("1. render_device")
print("2. audit_device")

askuser = input("Would you like to render_device or audit_device? : ")

def verify_input(sites_set):

    get_site_name = input("Please enter the site name you'd like to render :")

    if get_site_name in sites_set:
        print('Proceed')
        return
    else:
        print('Not in either list, please enter a valid site')
        verify_input(sites_set)

if askuser == "1":

        sites_2017 = ["bob", "joe", "charlie"]
        sites_2018 = ["sarah", "kelly", "christine"]

        verify_input(set(sites_2017 + sites_2018))

这在函数内以及在调用时可以正常工作。但是,问题是我需要get_site_name作为全局变量,因为其输入稍后会在脚本中引用(而不是在函数中)。当我将get_site_name设置为全局时,该函数可以引用该函数,并且在输入有效站点时可以正常工作,但是当输入无效站点时,它只会不断循环播放"Not in either list"错误,这可能是因为raw_input变量中的get_site_name不在本地定义。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

那又怎么样:

let $uris := 
  cts:uris((),'limit=200000',
    cts:and-query(
     cts:collection-query("/TRA")
    ))
for $uri in $uris
let $result :=
  try { fn:exists(doc($uri)) }
  catch($err) { $err }
return
  typeswitch($result)
  case element(error:error) return ("received the following exception: ", $result)
  default return $result
, 
xdmp:elapsed-time()