簡體   English   中英

如果內部調用的所有函數都為真,我如何編寫一個返回真的函數,否則返回假/錯誤?

[英]how do i write a function that returns true if all the functions called inside it are true, returns false/errror otherwise?

這里是python的新手。 我需要檢查文件的元素。 我的代碼是這樣的:

    import json, os, warnings

    file='file.json'
    id_list=[]

    def file_accessible(file):
        if os.path.exists(file) :
            try:
                f = open(file)
                f.close()
            except IOError:
                return False
            else:
                return True


    def valid_jsonfile(file):
        with open(file) as json_file:
            try:
                json.load(json_file)
            except ValueError as e:
                return False
            else:
                return True


    def open_file(file):
        with open(file) as json_file:
            data= json.load(json_file)
            return data


    def access_dict(data):
        if isinstance(data, dict):
            for key in data.keys():
                return data.keys()


    def is_empty(dict_elem):
        if dict_elem=="":
            return True
        else:
            return False


    def is_integer(dict_elem):
        if not is_empty(dict_elem):
            if not isinstance(dict_elem,bool):
                if isinstance(dict_elem,int):
                    return True
                else:
                    # raise TypeError('Value of given key is not integer')
                    return False
            else:
                return False
        else:
            # raise ValueError('Empty value')
            return False

    def check_id(dict_elem):
        if is_integer(dict_elem):
            if not id_list:
                id_list.append(dict_elem)
                return True
            else:
                if dict_elem in id_list:
                        #return ValueError('id not unique, already exist.')
                        return False
                else:
                        id_list.append(dict_elem)
                        return True

    def gt_zero (dict_elem):
        if is_integer(dict_elem):
            if dict_elem > 0:
                return True
            else:
                return False
        elif isinstance(dict_elem,(dict,list)):
            if len(dict_elem)>0:
                return True
            else:
                return False
        else:
            # raise TypeError('Value of given key is not integer')
            return False

    def check_bool(dict_elem):
        if isinstance(dict_elem, bool):
            return True
        else:
            # raise TypeError('Not a boolean value.')
            return False

    def not_negative(dict_elem):        
        if is_integer(dict_elem):
            if dict_elem>=0:
                return True
            else:
                # raise ValueError('negative value')
                return False
        else:
            # raise TypeError('Value of given key is not integer')
            return False

    def main():

            file_accessible(file)
            valid_jsonfile(file)
            data= open_file(file)
            n=len(data['dict1'])
            for i in range(n):
                keys= access_dict(data['dict1'][i])
                for k in keys:
                    is_empty(data['dict1'][i][k])
                check_id(data['dict1'][i]['id'])
                check_bool(data['dict1'][i]['bool_var1'])
                check_bool(data['dict1'][i]['bool_var2'])
                is_integer(data['dict1'][i]['var1'])
                not_negative(data['dict1'][i]['var1'])
                gt_zero(data['dict1'][i]['nested_dict1'])

我的問題是,如果其中的所有函數都成功,我需要 main 返回 true,如果其中 1 個函數返回 false 或發生錯誤,則返回 false。 我試過 if else

            def main():      

                n=len(data['dict1'])
                if n:
                    pass
                for i in range(n):
                    keys= access_dict(data['dict1'][i])
                    for k in keys:
                        if is_empty(data['dict1'][i][k]):
                            pass
                    if check_id(data['dict1'][i]['id']):
                        pass
                    if check_bool(data['dict1'][i]['bool_var1']):
                        pass
                    if check_bool(data['dict1'][i]['bool_var2']):
                        pass
                    if is_integer(data['dict1'][i]['var1']):
                        pass
                    if not_negative(data['dict1'][i]['var1']):
                        pass
                    if gt_zero(data['dict1'][i]['nested_dict1']):
                        return True
                    else:
                        return False

但只有當 gt_zero 函數為假時,才會返回假。

我的 file.json 看起來像這樣:

                    {
                        "dict1":[
                            {
                                "id": 1,
                                "bool_var1": 'false',
                                "bool_var2": 'true',
                                "var1": 120,
                                "nested_dict1": [
                                    {
                                        "somevar":"some Text"

                                    },
                                    {
                                        "somevar":"some Text"

                                    },
                                    {
                                        "somevar":"some Text"

                                    }
                                ]
                            },
                            {
                                "id": 2,
                                "bool_var1": 'false',
                                "bool_var2": 'true',
                                "var1": 120,
                                "nested_dict1": [
                                    {
                                        "somevar":"some Text"

                                    },
                                    {
                                        "somevar":"some Text"

                                    },
                                    {
                                        "somevar":"some Text"

                                    }
                                ]
                            },
                            {
                                "id": 3,
                                "bool_var1": 'false',
                                "bool_var2": 'true',
                                "var1": 120,
                                "nested_dict1": [
                                    {
                                        "somevar":"some Text"

                                    },
                                    {
                                        "somevar":"some Text"

                                    },
                                    {
                                        "somevar":"some Text"

                                    }
                                ]
                            }
                        ]
            }

您可以將主腳本更改為:

                if not check_id(data['dict1'][i]['id']):
                   return False
                if not check_bool(data['dict1'][i]['bool_var1']):
                    return False
                if not check_bool(data['dict1'][i]['bool_var2']):
                    return False
                if not is_integer(data['dict1'][i]['var1']):
                    return False
                if not not_negative(data['dict1'][i]['var1']):
                    return False
                if not gt_zero(data['dict1'][i]['nested_dict1']):
                    return False
                return True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM