Как распространять ошибку python за пределами канала в сценарии bash [duplicate]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
3
задан Velkan 20 September 2015 в 20:44
поделиться

1 ответ

Я думаю, что вы ищете опцию pipefail. На странице bash man:

pipefail

Если установлено, возвращаемое значение конвейера является значением последней (самой правой) команды для выхода с ненулевым статус или ноль, если все команды в конвейере успешно завершены. Этот параметр отключен по умолчанию.

Итак, если вы запускаете свой скрипт-оболочку с помощью

#!/bin/bash

set -e
set -o pipefail

Затем оболочка выйдет, когда возникнет какая-либо ошибка (set -e). и установит статус трубопровода так, как вы хотите.

8
ответ дан Ewan Mellor 18 August 2018 в 22:47
поделиться
  • 1
    Нет, это не работает. Кто черт возьми? :) – Velkan 20 September 2015 в 21:11
  • 2
    Работает в bash, но не обязательно в других оболочках - вы уверены, что находитесь в правильной оболочке? askubuntu.com/a/886540 – Markus Shepherd 27 July 2017 в 08:39
  • 3
    Да, это просто работает для bash – deFreitas 15 October 2017 в 03:36
  • 4
    Во всяком случае, это опасный флаг, он может сделать неожиданное поведение – deFreitas 15 October 2017 в 03:44
  • 5
    использовать set + o pilefail для восстановления "default & quot; поведение – makeroo 21 June 2018 в 10:28
Другие вопросы по тегам:

Похожие вопросы: