Разбор аргументов командной строки в Python: получение KeyError - PullRequest
3 голосов
/ 13 сентября 2011

Я пытаюсь выполнить мой скрипт на Python как:

python series.py supernatural 4 6
Supernatural : TV Series name 
4 : season number
6 : episode number

Теперь в своем сценарии я использую три приведенных выше аргумента для получения заголовка эпизода:

import tvrage.api
import sys

a =  sys.argv[1] 
b = sys.argv[2]
c =  sys.argv[3]

temp = tvrage.api.Show(a)
name  = temp.season(b).episode(c)  # Line:19
print ( name.title)

Но я получаю эту ошибку:

File "series.py", line 19, in <module>:
  name = super.season(b).episode(c) 
File "C:\Python26\Lib\site-packages\tvrage\api.py", line 212, in season
  return self.episodes[n] KeyError: '4'

Я использую Python 2.6.

Ответы [ 2 ]

3 голосов
/ 13 сентября 2011

A KeyError означает, что вы пытаетесь получить доступ к элементу в словаре, который не существует.Этот код выдаст ошибку, потому что в словаре нет ключа 'three':

>>> d = dict(one=1, two=2)
>>> d
{'two': 2, 'one': 1}
>>> d['three']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'three'

См. запись Python Wiki на KeyErrors .

3 голосов
/ 13 сентября 2011

Python TVRage API ожидает целые числа, а не строки (это то, что вы получаете от argv):

name = temp.season(int(b)).episode(int(c))

исправит ошибку, если существует сезон 4 эпизода 6.

Вы должны взглянуть на модули синтаксического анализа командной строки, которые поставляются с Python. Для 3.2 / 2.7 или новее используйте argparse . Для более старых версий используйте optparse . Если вы уже знаете C getopt, используйте getopt .

...