Обрабатывать исключение NoneType в пользовательском коде - PullRequest
0 голосов
/ 28 февраля 2019

Мой код:

def getVersion(DownloadFile,rel,dll):
   q = "(Get-Item " + DownloadFile +").VersionInfo | Format-List | findstr ProductVersion"
   proc = subprocess.Popen(["powershell.exe", q], stdout=subprocess.PIPE)
   start = ': '
   end = '\''
   result = re.search('%s(.*)%s' % (start, end), str(proc.stdout.read().rstrip())).group(1)
   return (result)

Код предназначен для запуска команды powershell и получения результатов сравнения.Подробно, это найти версию DLL с PowerShell.Но для определенных DLL-файлов PowerShell не возвращает никакой версии (выдает пустой вывод), а затем мой код Python паникует и выдает ошибку.

Я сталкиваюсь с ошибкой:

result = re.search('%s(.*)%s' % (start, end), str(proc.stdout.read().rstrip())).group(1)
AttributeError: 'NoneType' object has no attribute 'group'

Я ищу способ справиться с этим.

1 Ответ

0 голосов
/ 28 февраля 2019

Отделите поиск совпадений от вызова .group (1), затем вызывайте .group (1), только если совпадение существует:

def getVersion(DownloadFile,rel,dll):
    q = "(Get-Item " + DownloadFile +").VersionInfo | Format-List | findstr ProductVersion"
    proc = subprocess.Popen(["powershell.exe", q], stdout=subprocess.PIPE)
    start = ': '
    end = '\''
    match = re.search('%s(.*)%s' % (start, end), str(proc.stdout.read().rstrip()))
    return match.group(1) if match else None
...