Лучший способ проверить переменную, чтобы избежать нескольких условий для нескольких переменных - PullRequest
0 голосов
/ 19 сентября 2019

Ниже приведен пример кода, в котором определены три переменные 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 и т. Д., Но с учетом того, можно ли этого избежать, поскольку у нас есть несколько таких переменных и мы достигли более умного или другого изящного способа.

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

Немного расширен, но делает хитрость:

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)
1 голос
/ 19 сентября 2019

Возможно, это решение для вас, но оно будет зависеть от того, откуда берутся эти переменные:

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))
0 голосов
/ 19 сентября 2019

Возможно, вы могли бы сделать

print(f"{'Job Name' + job_Name + ', ' if job_Name else ''}{'Output' + out_File + ', ' if out_File else ''}{'Error' + err_File + ', ' if err_File else ''}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...