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

Python 检查变量的更好方法,以避免多个变量出现多个条件,python,if-statement,conditional-statements,Python,If Statement,Conditional Statements,我有下面的示例代码,其中定义了三个变量job\u Nameout\u Fileerr\u File 现在,如果任何变量或所有变量都为空或未定义,我希望从print语句中删除此项 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)) ie:如果作业名称为空则应打印: O

我有下面的示例代码,其中定义了三个变量
job\u Name
out\u File
err\u File

现在,如果任何变量或所有变量都为空或未定义,我希望从print语句中删除此项

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))
ie:
如果作业名称为空
则应打印:

Output  Error
/tmp/123 /tmp/321
假设
out\u文件
err\u文件
未定义,则只应打印
作业名称

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

也许这是您的解决方案,但这取决于这些变量的来源:

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))
也许你能做到

print(f"{'Job Name' + job_Name + ', ' if job_Name else ''}{'Output' + out_File + ', ' if out_File else ''}{'Error' + err_File + ', ' if err_File else ''}")
也许你能做到

print(f"{'Job Name' + job_Name + ', ' if job_Name else ''}{'Output' + out_File + ', ' if out_File else ''}{'Error' + err_File + ', ' if err_File else ''}")

稍微延长一点,但会起作用:

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)

稍微延长一点,但会起作用:

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)

…但对于逗号来说,这既不好也不是完美的解决方案…但是对于逗号来说,这既不好也不是完美的解决方案