Как преобразовать строковый элемент в переменную int из списка? - PullRequest
0 голосов
/ 08 мая 2019

Я новичок в 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

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

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

>>> int('1586')
1586

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

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

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

    if uid == line[2]:
    

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

0 голосов
/ 08 мая 2019

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...