什么是脚本
Python 是一种“脚本语言”。脚本,对应的英文是:script。一般人看到script这个英文单词,或许想到的更多的是:电影的剧本,就是一段段的脚本,所组成的。电影剧本的脚本,决定了电影中的人和物,都做哪些事情,怎么做。而计算机中的脚本,决定了:计算机中的操作系统和各种软件工具,要做哪些事情,以及具体怎么做。
脚本 vs 程序
你可能想要了解脚本与一般程序的区别是什么。
脚本与一般程序的主要区别在于是否编译。相对于程序而言,脚本更加随性。写完了脚本,直接就可以在某种具有解释功能的环境中运行。(我们将会在本课学习如何写和运行 Python 脚本。)
而非脚本语言(编译语言),比如 C、Java 语言。我们需要通过编译(Compile)和链接(link)等步骤,生成可执行文件。然后通过可执行文件在计算机上运行。
修改 Python 脚本
自己编写脚本
在文本编辑器中打开全新的空文件,命名该文件并将其保存到放置 Python 课程文件的文件夹中。将以下代码放入该文件里。
how_many_snakes = 1
snake_string = """
Welcome to Python3!
____
/ . .\\
\ ---<
\ /
__________/ /
-=:___________/
<3, Juno
"""
print(snake_string * how_many_snakes)
在脚本中接受原始输入
我们可以使用内置函数 input 获取用户的原始输入,该函数接受一个可选字符串参数,用于指定在要求用户输入时向用户显示的消息。
name = input("Enter your name: ")
print("Hello there, {}!".format(name.title()))
这段代码提示用户输入姓名,然后在问候语中使用该输入。input 函数获取用户输入的任何内容并将其存储为字符串。如果你想将输入解析为字符串之外的其他类型,例如整数(如以下示例所示),需要用新的类型封装结果并从字符串转换为该类型。
num = int(input("Enter an integer"))
print("hello" * num)
我们还可以使用内置函数 eval 将用户输入解析为 Python 表达式。该函数会将字符串评估为一行 Python 代码。
result = eval(input("Enter an expression: "))
print(result)
如果用户输入 2 * 3,输出为 6
Try 语句
我们可以使用 try 语句处理异常。你可以使用 4 个子句(除了视频中显示的子句之外还有一个子句)。
try:这是 try 语句中的唯一必需子句。该块中的代码是 Python 在 try 语句中首先运行的代码。
except:如果 Python 在运行 try 块时遇到异常,它将跳到处理该异常的 except 块。
else:如果 Python 在运行 try 块时没有遇到异常,它将在运行 try 块后运行该块中的代码。
finally:在 Python 离开此 try 语句之前,在任何情形下它都将运行此 finally 块中的代码,即使要结束程序,例如:如果 Python 在运行 except 或 else 块中的代码时遇到错误,在停止程序之前,依然会执行此finally 块。
为何在 Python 中需要 finally 子句?
指定异常
我们实际上可以指定要在 except 块中处理哪个错误,如下所示:
try:
# some code
except ValueError:
# some code
现在它会捕获 ValueError 异常,但是不会捕获其他异常。如果我们希望该处理程序处理多种异常,我们可以在 except 后面添加异常元组。
try:
# some code
except (ValueError, KeyboardInterrupt):
# some code
或者,如果我们希望根据异常执行不同的代码块,可以添加多个 except 块。try:
# some code
except ValueError:
# some code
except KeyboardInterrupt:
# some code
练习解决方案:处理除以零的情形
def create_groups(items, num_groups):
try:
size = len(items) // num_groups
except ZeroDivisionError:
print("WARNING: Returning empty list. Please use a nonzero number.")
return []
else:
groups = []
for i in range(0, len(items), size):
groups.append(items[i:i + size])
return groups
finally:
print("{} groups returned.".format(num_groups))
print("Creating 6 groups...")
for group in create_groups(range(32), 6):
print(list(group))
print("\nCreating 0 groups...")
for group in create_groups(range(32), 0):
print(list(group))
修改上面的脚本以处理除以零错误。正确修改的话,应该会输出:
Creating 6 groups...
6 groups returned.
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[10, 11, 12, 13, 14]
[15, 16, 17, 18, 19]
[20, 21, 22, 23, 24]
[25, 26, 27, 28, 29]
[30, 31]
Creating 0 groups...
WARNING: Returning empty list. Please use a nonzero number.
0 groups returned.
访问错误消息
在处理异常时,依然可以如下所示地访问其错误消息:
try:
# some code
except ZeroDivisionError as e:
# some code
print("ZeroDivisionError occurred: {}".format(e))
应该会输出如下所示的结果:
ZeroDivisionError occurred: division by zero
因此依然可以访问错误消息,即使已经处理异常以防止程序崩溃!
如果没有要处理的具体错误,依然可以如下所示地访问消息:
try:
# some code
except Exception as e:
# some code
print("Exception occurred: {}".format(e))
Exception 是所有内置异常的基础类。你可以在此处详细了解 Python 的异常。