zoukankan      html  css  js  c++  java
  • Python基础知识:文件和异常

    1、相对路径:如果文件和程序在同一文件夹内,可不用路径;如果文件在程序所在文件夹下一级文件夹中,只需添加下一级文件夹名称即可;

      在Linux和OS系统中:文件路径中使用斜杠(/)         

      在Windows系统中:文件路径使用反斜杠()

      通过使用绝对路径,可读取任何地方的文件,但最简单的方法是,要么将文件存储在程序所在的目录,要么存储在程序文件所在目录的下一级文件夹中。

      with open() as 通过使用这个方法打开文件,不需要你手动关闭文件,Python会在合适的机会关闭它。

    #open(),read()打开文本文件,并读取内容
    with open('text_fileword.txt') as file_object:
        contents = file_object.read()
        print(str(1)+'.'+contents)
    #打开文件,逐行读取
    with open('text_fileword.txt') as file_object:
        print(str(2)+'.')
        for line in file_object:
            print(line.rstrip())

    2、readlines()在with代码块中将文件内容存储在一个列表中,再在with代码块外打印它

    #readlines()函数
    with open('text_fileword.txt') as file_object:
        lines = file_object.readlines()
    print(str(3)+'.')
    for line in lines:
        print(line.rstrip())

    3、统计文件的行数

    #每行以下标加行的形式显示
    with open('text_fileword.txt','r') as f_obj:
        lines = f_obj.readlines()
        count = len(lines)
       print(count)

    4、转义字符:绝对路径,将长路径存放到变量中,u 等均为转义字符,需要在路径前加r,不做转义处理

    file_path = r'C:UsersAdministratorDesktopPycharm_Projectspycharm	ext_fileword.txt'
    with open(file_path) as file_object:
        contents = file_object.read()
        print(str(4)+'.'+contents)

    5、打开文件是,我们可以指定只读模式('r'),写入模式('w'),附加模式('a'),读取和写入模式('r+'),默认以只读模式打开文件。

      如果写入文件不存在,函数open()将自动创建它;

      如果写入模式打开文件,指定的文件已经存在,将在返回文件对象前清空该文件,再重新写入;

      如果以附加模式打开文件,内容会自动添加到文件末尾。

      注意:Python只能将字符串写入文本文件,要将数值存储到文本文件中,必须先使用str()函数将其转换为字符串格式。

    #以附加模式写入内容write()
    while True:
        user_name = input('Enter your name:')
        if user_name == 'q':
            break
        else:
            filename = 'text_fileguests.txt'
            with open(filename,'a') as file_object:
                file_object.write(user_name + '
    ')
                print('Welcome to the white house!')
            with open('text_fileguests_book.txt','a') as file_object2:
                file_object2.write('%s has been to the white house!
    '%user_name)

    6、基本异常处理

    • Python使用被称为“异常”的特殊对象来管理程序运行期间发生的错误,每当发生错误时,它都会创建一个异常对象,如果你编写了处理该异常的代码,程序将继续运行,如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
    • 最基本的异常处理:出现异常时,输出错误信息,程序不中断;Exception可以接收任何错误类型,也可以改成具体的错误类型,如FileNotFoundError。
    while True:
        num1 = input('输入数字:')
        try:
            num1 = int(num1)
            ret = num1 + 1
        except Exception as ex:
            #ex为Exception的实例
            print(ex)
    #invalid literal for int() with base 10: 's'
    • try-except-else 将可能出现异常的代码放到try下来执行,如果出现异常,执行except下的语句,没有错误的放到else。
    #ZeroDivisionError:处理整数不能除以0的异常
    print('please input two numbers.')
    print("enter 'q' to quit.")
    while True:
        first_number = input("First number:")
        if first_number == 'q':
            break
        second_number = input('Second number:')
        if second_number == 'q':
            break
        try:
            answer = int(int(first_number)/int(second_number))
        except ZeroDivisionError:
            print('You cannot divide by 0!')
        else:
            print(answer)

    7、处理FileNotFoundError找不到文件异常

    def read_file(filename):
        try:
            with open(filename) as f_obj:
                contents = f_obj.read()
                print(contents.split(','))
        except FileNotFoundError:
            msg = "The file %s doesn't exist!"%filename
            print(msg)
    filename = 'text_filecats.txt'
    read_file(filename)
    filename = 'alice.txt'
    read_file(filename)

    8、ValueError数值异常

    first_number = input("First number:")
    second_number = input('Second number:')
    try:
        num = int(first_number) + int(second_number)
    except ValueError:
        print('wrong data type!')
    else:
        print(num)

    9、pass--定位符,直接跳过,不执行任何程序

    def read_file(filename):
        try:
            with open(filename) as f_obj:
                contents = f_obj.read()
                print(contents.split(','))
        except FileNotFoundError:
            pass
    filename = 'alice.txt'#没有此文件,遇到异常,直接跳过
    read_file(filename)
    filename = 'text_filecats.txt'
    read_file(filename)

    10、重构:将代码划分为一系列完成具体工作的函数,这个过程被称为重构。

    #重构greet_user(),分成三个函数
    import json
    def get_new_username():
        '''提示用户输入用户名'''
        filename = r'json_fileuser_name.json'
        username = input('enter your name:')
        with open(filename,'w') as f_obj:
            json.dump(username,f_obj)
            return username
    def get_stored_username():
        '''获取已经存储的用户名'''
        filename = r'json_fileuser_name.json'
        try:
            with open(filename,'r') as f_obj:
                username = json.load(f_obj)
        except FileNotFoundError:
            return None
        else:
            return username
    def greet_user():
        '''欢迎用户,并指出其名字'''
        username = get_stored_username()
        print(username)
        if username:#如果函数返回的是用户名,就执行
            judge_flag = input('Is the username right?(y/n):')#询问用户名是否正确
            if judge_flag == 'y':
                print('Welcome back,%s' % username)
            else:#如果不正确,提示用户输入用户名,并存储
                username = get_new_username()
                print("We'll remember you when you come back,%s."%username)
        else:#如果函数返回的是空,就提示用户输入用户名
            username = get_new_username()
            print("We'll remember you when you come back,%s." % username)
    greet_user()#运行函数

     11、常用异常种类

    AttributeError    #试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError           #输入/输出异常;基本上是无法打开文件
    ImportError       #无法引入模块或包;基本上是路径问题或名称错误
    IndentationError  #语法错误(的子类) ;代码没有正确对齐
    IndexError        #下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError          #试图访问字典里不存在的键
    KeyboardInterrupt #Ctrl+C被按下
    NameError         #使用一个还未被赋予对象的变量
    SyntaxError       #Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError         #传入对象类型与要求的不符合
    UnboundLocalError #试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
    ValueError        #传入一个调用者不期望的值,即使值的类型是正确的

    12、异常处理完整的代码块

    try:
        #所有的逻辑代码
        pass
    except ValueError as ex:
        #接收值错误类型的报错
        print(ex)
    except Exception as ex:
        #接收任何错误类型的报错
        print(ex)
    else:
        #没有报错时执行
        pass
    finally:
        #无论是否报错,都执行
        pass

    13、主动触发异常错误

    try:
        raise Exception('主动错误')#self.message = '主动错误'
        print(123) #不会执行
    except Exception as ex:
        print(ex)  #Exception中有__str__,return self.message
    finally:
        #无论是否报错,都执行
        print(123)#执行
  • 相关阅读:
    executable binary cannot run on android marshmallow (android 6.0)
    Android std and stl support
    Android std and stl support
    (OK) static linked & dynamically linked
    (OK)(OK) cross compile quagga-0.99.21mr2.2 for android-x86 in Fedora23
    linux和STL 常用头文件及说明
    Firefox 新增容器标签:可同时登录多个用户
    Android —— API Level
    Android added new permission model for Android 6.0 (Marshmallow).
    (OK) Android adb连接VirtualBox方式
  • 原文地址:https://www.cnblogs.com/charliedaifu/p/9934522.html
Copyright © 2011-2022 走看看