[英]Better way to check variable to avoid multiple conditions for multiple variables
我有下面的示例代码,其中定义了三个变量job_Name
out_File
err_File
。
现在,如果任何变量或所有变量为空或未定义,我希望从打印语句中删除它
job_Name = "Test"
out_File = "/tmp/123"
err_File = "/tmp/321"
print("Job Name {0},Output {1}, Error {2}".format(job_Name,out_File,err_File))
即: if job_Name is empty
,则应打印:
Output Error
/tmp/123 /tmp/321
假设out_File
和err_File
未定义它应该只打印job_Name
。
Job Name
Test
这可以通过链条件if
else
等来完成。但是看看是否可以避免这种情况,因为我们有多个这样的变量并通过一些更智能或其他优雅的方式来实现。
也许这对您来说是一个解决方案,但这取决于这些变量的来源:
error_data = {
"Job Name": "Test",
"Output": "/tmp/123",
"Error": "/tmp/321"
}
line = []
for description, value in error_data.items():
if(value):
line.append("{description} {value}".format(description=description, value=value))
print(",".join(line))
有点扩展,但可以解决问题:
job_Name = "Test"
out_File = "/tmp/123"
err_File = "/tmp/321"
headers = ''
output = ''
if job_Name:
headers += 'Job Name\t'
if out_File:
headers += 'Output\t'
if err_File:
headers += 'Error\t'
for val in [job_Name, out_File, err_File]:
if val:
output += val + '\t'
print(headers)
print(output)
如果您的变量具有要打印的所需名称,另一种方法可能是:
def retrieve_name(var):
# prints the given variable's name
import inspect
callers_local_vars = inspect.currentframe().f_back.f_locals.items()
return [var_name for var_name, var_val in callers_local_vars if var_val is var]
job_Name = "Test"
out_File = "/tmp/123"
err_File = "/tmp/321"
headers = ''
output = ''
for val in [job_Name, out_File, err_File]:
if val:
headers += str(retrieve_name(val)[0]) + '\t'
output += val + '\t'
print(headers)
print(output)
也许你可以做
print(f"{'Job Name' + job_Name + ', ' if job_Name else ''}{'Output' + out_File + ', ' if out_File else ''}{'Error' + err_File + ', ' if err_File else ''}")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.