2015-06-25 1 views
4

В моем коде следующее сообщение об ошибке срабатывает, и я не понимаю, как этот случай может придумать:Как это может быть len (sys.argv) <= 0?

if(len(sys.argv) > 0): 
    doSomething() 
else: 
    raise AttributeError("Could not parse script name") 

Вышеприведенный код находится в классе питона, который я импортировать и использовать в каком-то сценарии. Я использую тот же класс с одним и тем же вызовом в других сценариях, и он отлично работает везде. FYI, моя ОС ubuntu.

Как возможно, что len (sys.argv) равен < = 0?

+4

Число аргументов не может быть меньше нуля, но оно может быть равно нулю. Например, если ваша программа запускается через одну из функций [POSIX 'exec'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html), где можно вообще не передавать какие-либо аргументы включая отказ от аргумента «имя программы». –

+1

@Joachim Насколько я понимаю [документация] (https://docs.python.org/2/library/sys.html), 'argv' должен содержать по крайней мере пустую строку, например, если она была вызываемый в интерактивном интерпретаторе. – deceze

+1

Можете ли вы рассказать нам, как был запущен/выполнен скрипт Python, когда 'sys.argv' пуст? Может быть, показать стек вызовов, созданный тем исключением, которое вы делаете? –

ответ

1

Итак, мы нашли ответ; @nneonneo дал правильную подсказку, в какой-то момент на самом деле ARGV был модифицирован:

args = sys.argv 
del args[0] 

Я думаю, автор этого кода хотел сделать что-то другое, потому что это на самом деле также удаляет sys.argv [0]. Мы стремимся изменить его следующим образом:

args = sys.argv[1:] 

Спасибо!

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