Ошибка значения при преобразовании из массива строк в массив num, недопустимый литерал при использовании аргумента команды?

#python #command-line

#питон #командная строка

Вопрос:

Я пытаюсь написать программу, которая принимает числа 1, 2, 3, 5, 7, 101 в качестве аргументов команды вычислите логарифм, синус, квадрат и косинус этих чисел и запишите результаты в CSV-файл. Я продолжаю получать ошибку ValueError, которая находится внизу. Это то, что у меня есть до сих пор:

 import sys
import math
import csv

print("the name of the program is ", sys.argv[0]) 
  
n = len(sys.argv[1]) 
a = sys.argv[1][1:n-1] 
a = a.split('; ') 
  
for i in a: 
    print(i) 
def main():
    # reading only the numbers from command line
    # and storing it in the list num_list

    str_num = sys.argv[1::] # ['1', '2', '3', '5', '7', '101']
    
    
    num_list = [int(num) for num in str_num] # [1, 2, 3, 5, 7, 101]
    
    
    with open('results.csv', mode = 'w') as output_file:
        output_writer = csv.writer(output_file, delimiter = ';')
        
        
        for num in num_list: 
            row = []
            row.append(math.log(num))
            row.append(pow(num, 2))
            row.append(math.sin(num))
            row.append(math.cos(num))
            
            output_writer.writerow(row)
    
main()
 

Ошибка:

 ValueError                                Traceback (most recent call last)
<ipython-input-5-738df23d937b> in <module>
     38             output_writer.writerow(row)
     39 
---> 40 main()

<ipython-input-5-738df23d937b> in main()
     19 
     20     # converting string array to int array
---> 21     num_list = [int(num) for num in str_num] # [1, 2, 3, 5, 7, 101]
     22 
     23     # open 'results.csv' with write mode

<ipython-input-5-738df23d937b> in <listcomp>(.0)
     19 
     20     # converting string array to int array
---> 21     num_list = [int(num) for num in str_num] # [1, 2, 3, 5, 7, 101]
     22 
     23     # open 'results.csv' with write mode

ValueError: invalid literal for int() with base 10: '-f'
 

Комментарии:

1. Какие аргументы вы передаете программе?

2. Math.sin(num), math.log(num), math.cos(num), pow(num,2). Должен ли я был включить его ранее в код?

3. Я имею в виду через командную строку. Ошибка, которую вы получаете, говорит о том, что вы передаете строку -f int() , так str_num что это может быть не то, что вы думаете.

4. Я думаю то же самое с @montgomery-watts. Проверьте тип и формат вашего str_num документа с помощью печати или другим способом. Может быть, тоже попробовать num_list = int(num.strip())