2010-06-30 5 views
0

В настоящее время я просматриваю несколько руководств, чтобы начать работать на Python, но, похоже, я несколько раз сталкиваюсь с одной и той же проблемой. Учебник, который я сейчас читаю, это Aloha.py в Introduction to Simulation от Norm Matloff.Newbie Python question about sys.argv

Проблема я удар, кажется, в следующем коде:

import random, sys 
class node: # one object of this class models one network node 
# some class variables 
    s = int(sys.argv[1]) # number of nodes 

сообщение об ошибке, когда я пытаюсь запустить программу является:

Traceback (most recent call last): 
    File "C:\Python26\Aloha.py", line 8, in <module> 
    class node: 
    File "C:\Python26\Aloha.py", line 10, in node 
    s = int(sys.argv[0]) 
ValueError: invalid literal for int() with base 10: 'C:\\Python26\\Aloha.py' 

Я работал, что sys.argv[1] не существует, когда я пытаюсь запустить программу, так кто-нибудь знает, где я могу ошибиться? Есть ли способ запустить программу, которая будет устанавливать эти значения, или моя система каким-то образом настроена неправильно?

+0

мне кажется, что вы пытаетесь конвертировать sys.argv [0] в целое, которое не является возможным. Я что-то пропустил? – Viele

ответ

3

sys.argv для сбора параметры, заданные программе в командной строке. Поэтому вместо того, чтобы просто запускать файл, вам нужно запустить python aloha.py 5 (или любой другой номер, который вы хотите).

(В противном случае, вы можете просто установить номер непосредственно в коде, вместо того, чтобы всегда ожидая его в командной строке, как в s = 5, например.)

4

отслеживающий показывает, что вы на самом деле это в вашем коде:

s = int(sys.argv[0]) 

так что вы ссылаетесь аргумента 0 - имя скрипта сам - а не 1.

+0

Хорошее наблюдение ... имя скрипта (как строка) обязательно не будет оцениваться как целое. – ewall

+0

Верно, я схватил неправильный бит текста для вопроса. Должно быть, s = int (sys.argv [1]) –

+0

Обратите внимание, что аргументы Python являются одними из тех, что можно ожидать двумя разными способами. Аргус для «python Aloha.py 5» не начинается с «python», и он не начинается с «5». Вы привыкните к этому, хотя. :-) –

1

Кроме того, чтобы загрузить в качестве аргументов командной строки при запуске программу, которую вы хотели бы запустить, например, такую ​​...

python Aloha.py 75 

Где 75 заменено числом узлов. 75 затем станет argv[1].

-1

попробовать

s = int(sys.argv[-1]) 
+1

Это не решение его проблемы. Его проблема в том, что он не понимает, что происходит! Один-лайнер не помогает в этом (и в любом случае сомнительно, потому что он, вероятно, забывает дать аргумент в командной строке) –

+2

Но если он это сделал, это один из способов его получить. Не такой хороший стиль, как просто sys.argv [1]. –