2017-08-18 5 views
0

J'ai une déclaration d'enregistrement, quelque chose comme:Spliting interpolation de chaîne Python sur plusieurs lignes

get_logger().info(
    'Logger logging %s because we need to log it.' % response['foo']['bar'] 
) 

Avec indentation il sort plus de 80 lignes. Si je pouvais le diviser autour du %, ce serait bien.

Comment puis-je le diviser en plusieurs lignes? (Idéalement sans juste mettre response['foo']['bar'] dans une variable)

+1

Mettez un '(' après la '%' - place le truc sur la ligne suivante et ajoute un ')'? –

Répondre

1
get_logger().info(
    'Logger logging %s because we need to log it.' 
    % response['foo']['bar'] 
) 
+0

Merci, je suppose que cela aurait dû être évident, mais je suis assez nouveau pour Python. – Jones

0

Lorsque vous utilisez chaîne Python mise en forme des fonctionnalités que vous pouvez fournir un tuple, et pas seulement une seule valeur, comme entrée:

>>> "%d %d %d" % tuple(range(3)) # or just (0, 1, 2) 
'0 1 2' 

Et puis facilement diviser votre tuple d'entrée en plusieurs lignes. Vous pouvez, en outre, même affecter la chaîne de modèle avec des espaces réservés avec un suffixe pour cent à une variable et l'utiliser plus tard. Un exemple serait:

>>> template = "The averaged temperatures of the last three days were %d, %d and %d" 
>>> template % (22, 26, 23) 
'The averaged temperatures of the last three days were 22, 26 and 23' 

Vous pouvez en savoir plus sur la chaîne Python formatage dans printf-style String Formatting (Python 3.5.4).

0

Il pourrait être intéressant de noter que, pour l'exploitation forestière,

get_logger().info(
    'Logger logging %s because we need to log it.' 
    % response['foo']['bar'] 
) 

est le même que:

get_logger().info(
    'Logger logging %s because we need to log it.', 
    response['foo']['bar'] 
) 

depuis le debug(), info(), etc. les méthodes interprètent *args comme étant utilisées pour la mise en forme de chaîne du message.

https://docs.python.org/2/library/logging.html#logging.Logger.debug

En général pour les longues chaînes, celles qui doivent enrouler autour de la colonne 80, utilisez des parenthèses, en profitant de l'adhésion de python chaîne intégré:

deeplyNested = True 
thing = 'feedback' 
class Contrived(object): 
    def __init__(self): 
     if deeplyNested: 
      logger.info(
       ("Sometimes there's a lot to say in %s and you need to write" 
       " longer messages than what nicely fits in the 80 column" 
       " limit."), 
       thing 
      )