首页 > 解决方案 > Python:函数内部的 3 个错误处理

问题描述

我创建了一个类和函数。该函数正在创建一个新对象并执行其他操作并返回该对象。

class DoublyLinkedList:
    def __init__(self, element):
        
        self.item = element
        self.before = None
        self.after = None
        
    def __str__(self):

        
        if self.before is None:
            return f'Previous node : {None}, item : {self.item}, Next node : {self.after.item};' 
        
        elif self.after is None:
            return f'Previous node : {self.before.item}, item : {self.item}, Next node : {None};'
        
        else:
            return f'Previous node : {self.before.item}, item : {self.item}, Next node : {self.after.item};'

def addToHeadDLL(element, head):

    try:
        name = DoublyLinkedList(element)

    except NameError:
        print('Please enter correct parameters')

    else:
        head.before = name
        name.after = head
        print('List added to Head')
        return name

a = DoublyLinkedList(1)
b = DoublyLinkedList(2)

a.after = b
b.before = a

c = addToHeadDLL(3, a) #Works

d = addToHeadDLL(4, e) #Produces NameError

当出现 NameError 时,它必须打印“请输入正确的参数”。但是输出是这样的,

List added to Head
Traceback (most recent call last):
  File "c:/Users/JBallipalli/Desktop/Codes/dll.py", line 43, in <module>
    d = addToHeadDLL(4, e)
NameError: name 'e' is not defined

请帮我解决这个问题...

编辑: 不是 try-except- else 不在函数中运行。检查以下代码。它确实运行。

import os

def openfolder(dir):
    """Opens folder in file explorer

    Args:
        dir (str): path of the folder
    """

    os.startfile(dir)

def access(dir):
    """Checking access to the given directory

    Args:
        dir (str): directory path

    Returns:
        bool, list: status, list of files & folders in the directory path
    """
    try:
        filesList = os.listdir(dir)

    except PermissionError:
        print(f'No permission to access {os.path.basename(dir)}')
        print(f'Please delete the file in {os.path.basename(dir)} manually')

        folder = input('Do you wanna open folder in file explorer? type y/n : ')

        if folder[0].lower() == 'y':
            openfolder(dir)

        return False, None

    else:
        return True, filesList

path = r'C:\Users\JBallipalli\Recent' # raises PermissionError
permission, files = access(path)

并检查输出:

No permission to access Recent
Please delete the file in Recent manually
Do you wanna open folder in file explorer? type y/n :

这两个函数之间的唯一区别是上面的(DoublyLinkedList)代码调用函数内部的类,而其他的则没有。我想知道为什么它的行为是这样的?

我的 Python 版本:3.7.6

标签: pythonpython-3.x

解决方案


NameError调用函数时返回,因为 python 不知道传递什么作为e.
它永远不会到达addToHeadDLL.


推荐阅读