Как работать с try и except в python? - PullRequest
0 голосов
/ 28 мая 2020

Эта программа должна анализировать количество студентов, и если они верны, записать их в один list, а если нет, записать в другой list. Они верны, если они состоят из восьми цифр и содержат только числа.

Однако я понятия не имею, что набирать, когда речь идет о частях try и except.

Если бы кто-нибудь мог помогите, буду очень признателен!

Valid_file = "ValidNumbers.txt"
Invalid_file = "InvalidNumbers.txt"
Data_file = "Data.txt"

def analyse_students(Data_file):
    lenth = len(Data_file)
    total = 0
    try:
    
    except: 
    
    return 0
    
def read(Data_file):
    count = 0
    student_list = []
    try:
        open(Data_file)
    except:
        print("Couldn't append file", Valid_file)
    return count, student_list

def write(student, status):
    if status:
        try:
            open(Data_file)
        except:
            print("Couldn't append file", Invalid_file)
    
count, student_list = read(Data_file)

print("Number of lines read", count)

for student in student_list:

    print("See output files")

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Вот как я это понимаю:

Вы хотите добавить правильные номера учащихся к list, а если они неправильные, добавить их в другой list. Способ проверки правильности номеров студентов - это числа, содержащие 8 цифр.

Предполагая, что student в вашем коде относится к номерам студентов: (используйте for loop для перебора список студентов Я попытался решить вашу основную задачу: try and except)

def analyse_students(Data_file):
    lenth = len(Data_file)
    total = 0
    try:
        if len(str(student)) == 8 and student in "1234567890":
            #append to a list(correct ones)
        elif not(lenth == 8 and Data_file in "1234567890"):
            #append to another list(wrong ones)  
        else:
            raise ValueError

    except Exception:
        #print something

    return 0

try вылавливает все ошибки, а except их. Таким образом, мы можем сами raise ошибку (скажем, ValueError здесь), и try тоже поймает это и отправит его в блок except, где будет напечатано сообщение об ошибке.

The raise ключевое слово вызывает исключение.

Вы можете определить тип ошибки для raise и текст для печати пользователю.

Надеюсь, это было полезно!

0 голосов
/ 28 мая 2020

Хорошо, поэтому есть несколько вещей, которые необходимо объяснить где.

Для чего используется try-except?

Он используется для обнаружения ошибок, возникающих в программе. Любой код, который может вызвать исключение, вставляется в оператор try, а под этим оператором - любое количество операторов except с любой единственной ошибкой, которую вы хотите перехватить.

try:
    user_input = int(input('Give me a number: '))
except ValueError:
    print('That is not a number!')

Когда следует использовать try-except?

Не рекомендуется использовать try-except в каждой строке кода, которая может вызвать ошибку, потому что это может быть половиной или больше. Итак, когда вы должны его использовать? Просто задайте этот вопрос: Хочу ли я выполнить какое-либо настраиваемое действие при появлении этой ошибки? Если ответ: да , вы можете go.

Catching Exception или пустой except

Как я вижу в вашем примере, вы используете пустой except. Использование пустого оператора except будет перехватывать каждую отдельную ошибку, возникшую в окруженном коде, что похоже (но не то же самое), что и перехват Exception. Класс Exception является суперклассом каждого встроенного исключения в среде Python, которое не является выходом из системы ( читайте здесь ), и, как правило, это плохая практика, чтобы перехватить все исключения с помощью except: или Exception с except Exception:. Почему? Потому что вы не позволяете пользователю (или даже вам, программисту) знать, какую ошибку вы обрабатываете. Например:

fruits = ['apple', 'pear', 'banana']
try: 
    selection = fruits[int(input('Select a fruit number (0-2): '))]  
except Exception:
    print('Error!')
    # But wait, are you catching ValueError because the user did not input a number, 
    # or are you catching IndexError because he selected an out of bound array index? 
    # You don't know  

Перехват нескольких исключений

Основываясь на предыдущем примере, вы можете использовать несколько операторов try-except, чтобы различать, какие ошибки возникают.

fruits = ['apple', 'pear', 'banana']
try: 
    selection = fruits[int(input('Select a fruit number (0-2): '))]  
except ValueError:
    print('That is not a number')
except IndexError:
    print('That fruit number does not exist!')  

Группировка исключений

Если есть два конкретных исключения, которые вы хотите использовать для одной и той же цели, вы можете сгруппировать их в tuple:

fruits = ['apple', 'pear', 'banana']
try: 
    selection = fruits[int(input('Select a fruit number (0-2): '))]  
except (ValueError, IndexError):
    print('Invalid selection!')  

Ваш случай

На основе этой информации добавьте эти блоки try-except в свой код и посмотрите, какие возможные ошибки могут возникнуть во время его выполнения, задав ранее рекомендованный вопрос Хочу ли я выполнить какое-либо настраиваемое действие с этой ошибкой?

Дополнительно

  • Есть try-except-else операторов. См. здесь
  • Есть инструкции try-except-finally. См. здесь
  • Вы можете объединить их все в операторе try-except1-except2...exceptN-else-finally.
  • Я рекомендую вам ознакомиться со встроенными ошибками, зачем это практиковать!
...