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)
…但对于逗号来说,这既不好也不是完美的解决方案…但是对于逗号来说,这既不好也不是完美的解决方案