2010-09-16 2 views
1

Рассмотрим следующий фрагмент кода:Python '' .format(): «tuple index out the range»?

>>> def foo(port, out, udp=False, ipv6=False, data=''): 
...  if not data: 
...    data = 'foo {family} {:port} {direction}'.format(
...        family=('ipv6' if ipv6 else 'ipv4'), 
...        port=port, 
...        direction=('out' if out else 'in')) 
...  return data 
... 
>>> foo(12345, out=True) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 6, in foo 
IndexError: tuple index out of range 

Насколько я знаю, область видимости имен выглядят хорошо. Что с загадочной ошибкой?

+0

Nevermind. '{: port}' должен быть '{port:}'. – Santa

ответ

2

Смотреть толстой кишки. Переместить его из передней части портовой зоны:

Либо

data = 'foo {family} {port:} {direction}'.format(

Или

data = 'foo {family} :{port} {direction}'.format(

Результаты двух опций:

>>> foo(12345, out=True) 
'foo ipv4 12345 out' 
>>> foo(12345, out=True) 
'foo ipv4 :12345 out'  
+0

Отмечено. Их называют «двоеточиями». ;-) – Santa

+0

Это совсем не педантично :) Исправлено. –

Смежные вопросы