Я новичок в Python и у меня есть проблема, когда я собираюсь вернуть целое число из функции. В функции у меня есть список, содержащий ['1586', '/home/username'].

Моя проблема в том, что я не могу найти способ взять строковое значение первого элемента в списке и сохранить его в целочисленной переменной, которую я затем могу вернуть из своей функции. Я попробовал способы, которые я нашел в Интернете, и, кажется, это работает без проблем, когда я просто конвертирую строковую переменную в целое число, однако, как только я пытаюсь это сделать со своим списком, это не работает. Если моего объяснения проблемы или кода недостаточно, сообщите мне об этом в комментарии, и я постараюсь изменить. Благодарность!

import subprocess
import re
import pwd

def sizeofhome(int):
   try:
       for line in pwd.getpwall():
           if int == line[2]:
               path = line[5]
               q = subprocess.check_output(["sudo", "du", "-sm", path]).decode()
               q = re.split("\s", q)
               number = q[0]
       return(number)
   except:  
       return None
0
NoccoFlow 8 Май 2019 в 13:45

2 ответа

Лучший ответ

Как показано в [SO]: Как преобразовать строки в целые числа в Python?,
[Python 3.Docs ]: Встроенные функции - class int ( [x] ) используется для преобразования целого числа в строку:

>>> int('1586')
1586

Но, назвав свой аргумент функции int , вы затеняли встроенный int (см. Выше), поэтому преобразование больше невозможно.
Переименовав аргумент во что-то другое (я бы предложил uid синхронизироваться с pwd ), проблема должна решиться прочь:

  • Заголовок функции:

    def sizeofhome(uid):
    
  • Тело функции:

    if uid == line[2]:
    

В качестве общего совета при возникновении таких ошибок используйте print (до строки, которая выдает исключение), а также не игнорируйте выброшенное исключение.

0
CristiFati 8 Май 2019 в 11:14

Это должно вам помочь!

import subprocess
import re
import pwd

def sizeofhome(int):
   try:
       for line in pwd.getpwall():
           if int == line[2]:
               path = line[5]
               q = subprocess.check_output(["sudo", "du", "-sm", path]).decode()
               q = re.split("\s", q)
               number = int(q[0])
       return(number)
   except:  
       return None
0
Salam 8 Май 2019 в 10:51