Как предотвратить сбой скрипта в результате сбоя процесса?

У меня есть это:

try { run 'tar', '-zxvf', $path.Str, "$dir/META6.json", :err }

Несмотря на то, что она находится в блоке try{}, эта строка по-прежнему вызывает сбой моего скрипта:

The spawned command 'tar' exited unsuccessfully (exit code: 1, signal: 0)
  in block  at ./all-versions.raku line 27
  in block  at ./all-versions.raku line 16
  in block <unit> at ./all-versions.raku line 13

Почему блок try{} не позволяет продолжить выполнение скрипта и как его продолжить?

Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
7
0
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что run не подвел (пока). run возвращает объект Proc. И это само по себе не бросает (пока).

Try просто возвращает этот Proc объект. Однако, как только возвращаемое значение используется (например, в результате его потопления), оно сбрасывается.

Сравните (с немедленным затоплением):

$ raku -e 'run "foo"'
The spawned command 'foo' exited unsuccessfully (exit code: 1, signal: 0)

С:

$ raku -e 'my $a = run "foo"; say "ran, going to sink"; $a.sink'
ran, going to sink
The spawned command 'foo' exited unsuccessfully (exit code: 1, signal: 0)

Теперь неясно, что вызывает использование объекта Proc в вашем коде. Вы должны показать больше кода.

Один из способов проверить успех — проверить код выхода:

$ raku -e 'my $a = run "foo"; say "failed" if $a.exitcode > 0'
failed

$ raku -e 'my $a = run "echo"; say "failed" if $a.exitcode > 0'

Или, альтернативно, используйте решение Джонатана:

$ raku -e 'try sink run "foo"'

Возможно, стоит предложить try sink run '...', что является решением «мне все равно, почему это не удается, просто игнорируйте это», которое, вероятно, изначально было нужно.

Jonathan Worthington 11.01.2023 12:20

Другие вопросы по теме