现在将前面的visit.py修改一下, 代码如下:
# visit.py
import commons
def run():
inp = input(“
请输入您想访问页面的url“).strip()
func = getattr(commons,inp)
func()
if __name__ == ‘__main__’:
run()
func = getattr(commons,inp)
语句是关键, 通过getattr()函数, 从commons模块里, 查找到和inp字符串外形相同的函
数名, 并将其返回, 然后赋值给
func变量。 变量func此时就指向那个函数, func()就可以调用该函数。
getattr()函数的使用方法: 接收2个参数, 前面的是一个类或者模块, 后面的是一个字符串, 注意了! 是个字符
串!
这个过程就相当于把一个字符串变成一个函数名的过程。 这是一个动态访问的过程, 一切都不写死, 全部根据用户输
入来变化。
前面的代码还有个小瑕疵, 那就是如果用户输入一个非法的
url, 比如jpg, 由于在commons里没有同名的函数, 肯定会
产生运行错误, 如下:
请输入您想访问页面的urljpg
Traceback (most recent call last):
File “F:/Python/pycharm/s13/reflect/visit.py”, line 16, in <module>
run()
File “F:/Python/pycharm/s13/reflect/visit.py”, line 11, in run
func = getattr(commons,inp)
AttributeError: module ‘commons’ has no attribute ‘jpg’
那怎么办呢? python提供了一个hasattr()的内置函数, 用法和getattr()基本类似, 它可以判断commons中是否具有某个成
员, 返回
TrueFalse。 现在将代码修改一下:
# visit.py
import commons
def run():
inp = input(“
请输入您想访问页面的url“).strip()
if hasattr(commons,inp):
func = getattr(commons,inp)
func()
else:
print(“404”)
if __name__ == ‘__main__’:
run()
这下就没有问题了! 通过hasattr()的判断, 可以防止非法输入导致的错误, 并将其统一定位到错误页面。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注