Python条件打印格式

Ste*_*art 2 python

我有这样的功能:

def PrintXY(x,y):
    print('{:<10,.3g} {:<10,.3g}'.format(x,y) )
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它是完美的:

>>> x = 1/3
>>> y = 5/3
>>> PrintXY(x,y)
0.333      1.67
Run Code Online (Sandbox Code Playgroud)

但是,让我们说x并且y不保证存在:

>>> PrintXY(x, None)
unsupported format string passed to NoneType.__format__
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我想打印什么,只是空的空间.我试过了:

def PrintXY(x,y):
    if y is None: 
        y = ''
    print('{:<10,.3g} {:<10,.3g}'.format(x,y) )
Run Code Online (Sandbox Code Playgroud)

但是这给了:

ValueError: Unknown format code 'g' for object of type 'str'
Run Code Online (Sandbox Code Playgroud)

如果数字不存在,如何打印空格,如果数字存在,则如何正确格式化?我宁愿不打印0或-9999来表示错误.

Ale*_*ane 6

我把它分开来清楚说明语句的内容.您可以将它组合成一行,但这会使代码更难阅读

def PrintXY(x,y):
    x_str = '{:.3g}'.format(x) if x else ''
    y_str = '{:.3g}'.format(y) if y else ''
    print('{:<10} {:<10}'.format(x_str, y_str))
Run Code Online (Sandbox Code Playgroud)

然后跑步给

In [179]: PrintXY(1/3., 1/2.)
     ...: PrintXY(1/3., None)
     ...: PrintXY(None, 1/2.)
     ...:
0.333      0.5
0.333
           0.5
Run Code Online (Sandbox Code Playgroud)

确保您的格式保持一致的另一种方法是做

def PrintXY(x,y):
    fmtr = '{:.3g}'
    x_str = fmtr.format(x) if x else ''
    y_str = fmtr.format(y) if y else ''
    print('{:<10} {:<10}'.format(x_str, y_str))
Run Code Online (Sandbox Code Playgroud)