繁体   English   中英

检查变量的更好方法以避免多个变量的多个条件

[英]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_Fileerr_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM